QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#369418 | #8340. 3 Sum | Giga_Cronos | WA | 1ms | 4136kb | C++20 | 2.7kb | 2024-03-28 08:21:12 | 2024-03-28 08:21:14 |
Judging History
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'