QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#352234 | #8340. 3 Sum | 111445# | WA | 0ms | 3924kb | C++23 | 2.2kb | 2024-03-13 01:27:22 | 2024-03-13 01:27:22 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N 500
#define B 6
int i,j,k,n,m,t;
const int M[21]={0,939235109,918177479,904775747,937509259,918480809,923802487,985385173,934431193,939365087,982767361,946533319,946423267,935536951,923956589,965647681,937270427,929863763,938269097,940115587,917694059};
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
const ll mask = rng();
ll shift(ll x) {
x ^= mask;
x ^= x << 13;
x ^= x >> 7;
x ^= x << 17;
x ^= mask;
return x;
}
struct SB{
int w[B+1],i;
void rd(string s){
for(i=1;i<=B;i++){
ll _w=0; int _M=M[i];
for(auto c:s){
_w=(_w*10+c-'0')%_M;
}
w[i]=_w;
}
}
ll get(){
ll res=0;
for(i=1;i<=B;i++)res=(shift(res)+w[i]);
return res;
}
}f[1005],f1;
int res=0;
ll w0,w1,w2,sb;
string s,ss;
string fuck(string s){
if(s=="0")return s;
int i,j,k,sz,n1,cur=0,it=m-1;
static int f[20005];
memset(f,0,m*4+50);
string ans;
while(s.size()>m){
k=s.size();
string s1=s.substr(k-m);
s.erase(k-m);
reverse(s1.begin(),s1.end());
//cout<<"CNMNMSL "<<s<<' '<<s1<<endl;
for(i=0;i<m;i++){
f[i]+=s1[i]-'0';
}
}
//cout<<"CNMNMSL "<<s<<endl;
reverse(s.begin(),s.end());
n1=s.size();
for(i=0;i<n1;i++){
f[i]+=s[i]-'0';
}
while(it>=0&&!f[it])it--;
if(it<0)return "0";
for(i=0;;i++){
if(i<=it)cur+=f[i];
//cout<<"NMSL "<<i<<' '<<f[i]<<' '<<cur<<endl;
if(i>it&&!cur)break;
ans+=char(cur%10+'0'); cur/=10;
}
reverse(ans.begin(),ans.end());
//cout<<"nmsl "<<ans<<endl;
return ans;
}
int main(){
ios::sync_with_stdio(0); cin.tie(0);
cin>>n>>m;
ss=string(m,'9');
for(i=1;i<=n;i++){
cin>>s;
while(s.size()>m)s=fuck(s);
if(s==ss)s="0";
//cout<<"nmsl "<<s<<endl;
f[i].rd(s);
}
return 0;
w0=f1.get();
f1.rd(ss); w1=f1.get();
for(i=1;i<=B;i++){
f1.w[i]=(f1.w[i]+f1.w[i])%M[i];
}
w2=f1.get();
for(i=1;i<=n;i++)for(j=i;j<=n;j++)for(k=j;k<=n;k++){
for(t=1;t<=B;t++){
f1.w[t]=(0ll+f[i].w[t]+f[j].w[t]+f[k].w[t])%M[t];
}
sb=f1.get();
if(sb==w0||sb==w1||sb==w2)res++;
}
cout<<res;
}
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3924kb
input:
4 1 0 1 10 17
output:
result:
wrong answer Answer contains longer sequence [length = 1], but output contains 0 elements