QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#369390 | #8340. 3 Sum | Giga_Cronos# | RE | 1ms | 3840kb | C++20 | 2.8kb | 2024-03-28 06:52:17 | 2024-03-28 06:52:17 |
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={998244353,1'000'000'007,1'000'000'009,2'000'000'099};
struct Hash{
vi H;
Hash(){
H.assign(4,0);
}
Hash(int a){
H.assign(4,a);
}
Hash(vi F):H(F){}
Hash operator -(Hash A){
vi Nas(4);
for(int i=0;i<4;i++){
Nas[i]=(H[i]+2*Mods[i]-A.H[i])%Mods[i];
}
return Hash{Nas};
}
Hash operator +(Hash A){
vi Nas(4);
for(int i=0;i<4;i++){
Nas[i]=(H[i]+A.H[i])%Mods[i];
}
return Hash{Nas};
}
Hash operator +(int a){
vi Nas(4);
for(int i=0;i<4;i++){
Nas[i]=(H[i]+a)%Mods[i];
}
return Hash{Nas};
}
Hash operator *(int mul){
vi Nas(4);
for(int i=0;i<4;i++){
Nas[i]=(H[i]*mul)%Mods[i];
}
return Hash{Nas};
}
bool operator ==(Hash A){
for(int i=0;i<4;i++){
if(A.H[i]!=H[i])return false;
}
return true;
}
};
void problem(){
cin>>n>>k;
vector<Hash> A;
for(int i=0;i<n;i++){
string s;cin>>s;
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<sz(s);j++){
int extra=F[j]/10;
F[j]%=10;
F[(j+1)%k]+=extra;
if(extra)ok=false;
}
if(ok)break;
}
Hash Num;
for(int j=0;j<k;j++){
Num=Num*10;
Num=Num+F[j];
}
A.pb(Num);
}
vector<Hash> Ans;
Ans.pb(Hash());
Hash Num;
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].H]++;
vector<Hash> 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]).H];
}
}
}
cout<<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: 100
Accepted
time: 1ms
memory: 3840kb
input:
4 1 0 1 10 17
output:
3
result:
ok 1 number(s): "3"
Test #2:
score: -100
Runtime Error
input:
500 859 7118711592236878297922359501613604144948355616986970837340677671376753603836852811886591300370143151943368529129749813118476151865844255212534355441611481420938483178075143062691345257288242460282715389758789648541099090735875617822348551942134616963557723055980260082230902505269975518146286...