QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#349380#8340. 3 Sumucup-team1055#WA 457ms48988kbC++202.7kb2024-03-10 01:28:052024-03-10 01:28:06

Judging History

你现在查看的是最新测评结果

  • [2024-09-20 10:20:30]
  • hack成功,自动添加数据
  • (/hack/848)
  • [2024-03-18 21:48:05]
  • hack成功,自动添加数据
  • (/hack/579)
  • [2024-03-18 21:45:33]
  • hack成功,自动添加数据
  • (/hack/578)
  • [2024-03-10 01:28:06]
  • 评测
  • 测评结果:WA
  • 用时:457ms
  • 内存:48988kb
  • [2024-03-10 01:28:05]
  • 提交

answer

#pragma once

#include <bits/stdc++.h>

#define rep(i, s, n) for (int i = (int)(s); i < (int)(n); i++)
#define rrep(i, s, n) for (int i = (int)(n)-1; i >= (int)(s); i--)
#define all(v) v.begin(), v.end()

using ll = long long;
using ld = long double;
using ull = unsigned long long;

template <typename T> bool chmin(T &a, const T &b) {
    if (a <= b) return false;
    a = b;
    return true;
}
template <typename T> bool chmax(T &a, const T &b) {
    if (a >= b) return false;
    a = b;
    return true;
}

using namespace std;

// isprime
bool isprime(ll n){
	if (n == 1) return false;
	for (ll i = 2; i * i <= n; i++){
		if (n % i == 0) return false;
	}
	return true;
}

ll mod_pow(ll x, ll m, int P){
	ll ret = 1;
	ll tmp = x;
	while (m > 0){
		if (m&1){
			ret = ret * tmp % P;
		}
		m >>= 1;
		tmp = tmp * tmp % P;
	}
	return ret;
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int n, k; cin >> n >> k;
	vector<string> s(n);
	rep(i,0,n){
		cin >> s[i];	
	}

	auto naosu = [&](string t) -> vector<int> {
		int pr = (int)t.size();
		int pl = (int)t.size() - k;
		vector<int> ret(k, 0);
		while(pr > 0){
			vector<int> tmp(k, 0);
			rep(i,max(0,pl),pr){
				tmp[i-pl] = t[i] - '0';
			}
			int over = 0;
			int gogo = 0;
			rrep(i,0,k){
				gogo = ret[i] + tmp[i] + over;
				if (gogo >= 10){
					gogo -= 10;
					over = 1;
				}else{
					over = 0;
				}
				ret[i] = gogo;
			}
			pr -= k;
			pl -= k;
		}
		return ret;
	};

	vector<vector<int>> gar;
	rep(i,0,n){
		gar.push_back(naosu(s[i]));
		/*
		rep(j,0,k){
			cout << gar[i][j];
		}
		cout << endl;
		*/
	}

	random_device seed_gen;
	mt19937 engine(seed_gen());
	uniform_int_distribution<int> dist((int)5e8, (int)1e9);

	const int numpy = 4;
	vector<int> pls(numpy);
	rep(i,0,numpy){
		do {
			pls[i] = dist(engine);
		}while(!isprime(pls[i]));
	}

	vector<vector<ll>> hashl(n, vector<ll>(numpy));
	rep(i,0,n){
		rep(p,0,numpy){
			ll tmp = 0;
			rep(j,0,k){
				tmp = tmp * 10 + gar[i][j];
				tmp %= pls[p];
			}
			hashl[i][p] = tmp;
		}
	}

	vector miru(4, vector<ll>(numpy));
	rep(i,0,numpy){		
		miru[1][i] = (mod_pow(10, k, pls[i]) + pls[i] - 1) % pls[i];
		miru[2][i] = miru[1][i] * 2 % pls[i];
		miru[3][i] = miru[1][i] * 3 % pls[i];
	}

	ll cnt = 0;
	vector<bool> mode(4, true);
	rep(i,0,n){
		rep(j,i,n){
			rep(l,j,n){
				{
					fill(mode.begin(), mode.begin() + 4, true);
					rep(p,0,numpy){
						ll t = hashl[i][p] + hashl[j][p] + hashl[l][p];
						rep(d,0,4){
							if (miru[d][p] != t) mode[d] = 0;
						}
					}
					if (mode[0] || mode[1] || mode[2] || mode[3]){
						cnt++;
					}
				}
			}
		}
	}
	cout << cnt << '\n';
	
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3808kb

input:

4 1
0
1
10
17

output:

3

result:

ok 1 number(s): "3"

Test #2:

score: 0
Accepted
time: 244ms
memory: 5844kb

input:

500 859
7118711592236878297922359501613604144948355616986970837340677671376753603836852811886591300370143151943368529129749813118476151865844255212534355441611481420938483178075143062691345257288242460282715389758789648541099090735875617822348551942134616963557723055980260082230902505269975518146286...

output:

0

result:

ok 1 number(s): "0"

Test #3:

score: 0
Accepted
time: 457ms
memory: 48988kb

input:

500 17336
11871159223687829792235950161360414494835561698697083734067767137675360383685281188659130037014315194336852912974981311847615186584425521253435544161148142093848317807514306269134525728824246028271538975878964854109909073587561782234855194213461696355772305598026008223090250526997551814628...

output:

0

result:

ok 1 number(s): "0"

Test #4:

score: -100
Wrong Answer
time: 437ms
memory: 14912kb

input:

500 1
751324443898124078584847834484321089092662321556147445230263526014359393841194947303407593948729802551881289193716611867931891257925091769456350249725997883453296895094445731130479434019358742162771547784250401546380268386074363779242500860317042151185119666027858022664683818314351285215150806...

output:

2361532

result:

wrong answer 1st numbers differ - expected: '2327631', found: '2361532'