QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#369418#8340. 3 SumGiga_CronosWA 1ms4136kbC++202.7kb2024-03-28 08:21:122024-03-28 08:21:14

Judging History

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

  • [2024-09-20 10:20:30]
  • hack成功,自动添加数据
  • (/hack/848)
  • [2024-03-28 08:21:14]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:4136kb
  • [2024-03-28 08:21:12]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

#define int     long long
#define pb      push_back
#define sz(x)   (int)(x.size())
#define fs      first
#define sc      second
#define all(x)  (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define mid     (L + R) / 2

typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<pii> vpii;
typedef __int128_t int128;

mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count());

int n, k;
const vi Mods = {1'000'000'009, 2'000'000'099,998'244'353,1'000'000'007};

	vi operator-(vi &A,vi &H) {
		vi Nas(4);
		for (int i = 0; i < 4; i++) {
			Nas[i] = (H[i] + Mods[i] - A[i]);
			if (Nas[i] >= Mods[i])
				Nas[i] -= Mods[i];
			if (Nas[i] >= Mods[i])
				Nas[i] -= Mods[i];
		}
		return Nas;
	}
	vi operator+(vi &A,vi &H) {
		vi Nas(4);
		for (int i = 0; i < 4; i++) {
			Nas[i] = (H[i] + A[i]);
			if (Nas[i] >= Mods[i])
				Nas[i] -= Mods[i];
		}
		return Nas;
	}
	vi operator+(vi &H,int a) {
		vi Nas(4);
		for (int i = 0; i < 4; i++) {
			Nas[i] = (H[i] + a);
			if (Nas[i] >= Mods[i])
				Nas[i] -= Mods[i];
		}
		return Nas;
	}
	vi operator*(vi &H,int mul) {
		vi Nas(4);
		for (int i = 0; i < 4; i++) {
			Nas[i] = (H[i] * mul) % Mods[i];
		}
		return Nas;
	}
	bool operator==(vi &A,vi &H) {
		return A==H;
	}

void problem() {
	scanf("%lld %lld", &n, &k);
	vector<vi> A;
	char ss[(int)(2e4 + 5)];
	for (int i = 0; i < n; i++) {
		scanf("%s", ss);
		//string s = string(ss);    
        string s;s.assign(2e4,'0');
		reverse(all(s));
		vi F(k);
		for (int j = 0; j < sz(s); j++) {
			F[j % k] += s[j] - '0';
		}
		while (1) {
			bool ok = true;
			for (int j = 0; j < k; j++) {
				int extra = F[j] / 10;
				F[j] %= 10;
				F[(j + 1) % k] += extra;
				if (extra)
					ok = false;
			}
			if (ok)
				break;
		}
        vi H(4);
		for (int j = 0; j < k; j++) {
			for(int h=0;h<4;h++){
                H[h]=(H[h]*10+F[j])%Mods[h];
            }
		}
		A.pb(H);
	}

	vector<vi> Ans;
	Ans.pb(vi(4));
	vi Num(4);
	for (int i = 0; i < k; i++) {
		Num = Num * 10;
		Num = Num + 9;
	}
	Ans.pb(Num);
	Num = Num * 2;
	Ans.pb(Num);
	map<vi, int> M;
	int ans = 0;
	for (int i = 0; i < n; i++) {
		M[A[i]]++;
		vector<vi> Sum = Ans;
		for (int h = 0; h < 3; h++) {
			Sum[h] = Sum[h] - A[i];
		}
		for (int j = i; j < n; j++) {
			for (int h = 0; h < 3; h++) {
				ans += M[(Sum[h] - A[j])];
			}
		}
	}
	printf("%lld\n", ans);
}

signed main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int tc = 1;
	// cin>>tc;
	while (tc--) {
		problem();
		// cout << "\n";
	}
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 4136kb

input:

4 1
0
1
10
17

output:

20

result:

wrong answer 1st numbers differ - expected: '3', found: '20'