QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#369393 | #8340. 3 Sum | Giga_Cronos# | RE | 0ms | 0kb | C++20 | 2.9kb | 2024-03-28 07:13:58 | 2024-03-28 07:14:00 |
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};
struct Hash{
vi H;
Hash(){
H.assign(2,0);
}
Hash(int a){
H.assign(2,a);
}
Hash(vi F):H(F){}
Hash operator -(Hash A){
vi Nas(2);
for(int i=0;i<2;i++){
Nas[i]=(H[i]+2*Mods[i]-A.H[i])%Mods[i];
}
return Hash{Nas};
}
Hash operator +(Hash A){
vi Nas(2);
for(int i=0;i<2;i++){
Nas[i]=(H[i]+A.H[i])%Mods[i];
}
return Hash{Nas};
}
Hash operator +(int a){
vi Nas(2);
for(int i=0;i<2;i++){
Nas[i]=(H[i]+a)%Mods[i];
}
return Hash{Nas};
}
Hash operator *(int mul){
vi Nas(2);
for(int i=0;i<2;i++){
Nas[i]=(H[i]*mul)%Mods[i];
}
return Hash{Nas};
}
bool operator ==(Hash A){
for(int i=0;i<2;i++){
if(A.H[i]!=H[i])return false;
}
return true;
}
};
void problem(){
scanf("%d %d", &n,&k);
vector<Hash> A;
for(int i=0;i<n;i++){
string s;
scanf("%s",s);
reverse(all(s));
vi F(k);
for(int j=0;j<sz(s);j++){
F[j%k]+=s[j]-'0';
}
int cant=(sz(s)+k-1)/k+1;
while(cant--){
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;
}
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];
}
}
}
printf("%d\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
Runtime Error
input:
4 1 0 1 10 17