QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#352233#8340. 3 Sum111445#TL 266ms3904kbC++232.1kb2024-03-13 01:26:512024-03-13 01:26:52

Judging History

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

  • [2024-09-20 10:20:30]
  • hack成功,自动添加数据
  • (/hack/848)
  • [2024-03-18 21:48:05]
  • hack成功,自动添加数据
  • (/hack/579)
  • [2024-03-18 21:45:33]
  • hack成功,自动添加数据
  • (/hack/578)
  • [2024-03-13 01:26:52]
  • 评测
  • 测评结果:TL
  • 用时:266ms
  • 内存:3904kb
  • [2024-03-13 01:26:51]
  • 提交

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);
	}
	
	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;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3700kb

input:

4 1
0
1
10
17

output:

3

result:

ok 1 number(s): "3"

Test #2:

score: 0
Accepted
time: 266ms
memory: 3904kb

input:

500 859
7118711592236878297922359501613604144948355616986970837340677671376753603836852811886591300370143151943368529129749813118476151865844255212534355441611481420938483178075143062691345257288242460282715389758789648541099090735875617822348551942134616963557723055980260082230902505269975518146286...

output:

0

result:

ok 1 number(s): "0"

Test #3:

score: -100
Time Limit Exceeded

input:

500 17336
11871159223687829792235950161360414494835561698697083734067767137675360383685281188659130037014315194336852912974981311847615186584425521253435544161148142093848317807514306269134525728824246028271538975878964854109909073587561782234855194213461696355772305598026008223090250526997551814628...

output:


result: