QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#525519#8340. 3 Sumliqingyang#WA 384ms12828kbC++172.1kb2024-08-20 17:29:432024-08-20 17:29:43

Judging History

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

  • [2024-09-20 10:20:30]
  • hack成功,自动添加数据
  • (/hack/848)
  • [2024-08-20 17:29:43]
  • 评测
  • 测评结果:WA
  • 用时:384ms
  • 内存:12828kb
  • [2024-08-20 17:29:43]
  • 提交

answer

#include<iostream>
#include<unordered_map>
#include<cstring>
#include<algorithm>
using namespace std;
const long long B=1e18;
const long long base=1e18+3;
int n,k;
char s[20010];
unsigned long long a[510][1120],b[1120],h[510];
unordered_map<unsigned long long,int> f;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>s+1;
		int len=strlen(s+1);
		reverse(s+1,s+len+1);
		for(int i=1;i<=len;i++)
		{
			s[i]-='0';
		}
		while(len>k)
		{
			int c=0;
			for(int i=1;i<=k;i++)
			{
				s[i]+=c;
				for(int j=i+k;j<=len;j+=k)
				{
					s[i]+=s[j];
				}
				c=s[i]/10,s[i]-=c*10;
			}
			len=k;
			while(c)
			{
				s[++len]=c%10;
				c/=10;
			}
		}
		if(len==k)
		{
			bool flag=1;
			for(int i=1;i<=len;i++)
			{
				if(s[i]<9)
				{
					flag=0;
					break;
				}
			}
			if(flag)
			{
				continue;
			}
		}
		for(int j=1,num=0;j<=len;j+=18)
		{
			unsigned long long &x=a[i][++num];
			for(int l=min(len,j+17);l>=j;x=x*10+s[l--]);
		}
	}
	int K=(k-1)/18+1;
	for(int i=1;i<=n;i++)
	{
		for(int j=1,c=0;j<=K;j++)
		{
			h[i]=h[i]*base+a[i][j];
		}
		unsigned long long p=9;
		for(int j=1;j<=18;j++,p*=10)
		{
			if(j>k-(K-1)*18)
			{
				h[i]+=p;
			}
		}
	}
	unsigned long long p=9,h0=0,H0=0;
	for(int j=1;j<=18;j++,p*=10)
	{
		if(j>k-(K-1)*18)
		{
			H0+=p;
		}
	}
	for(int j=p=1;j<=k-(K-1)*18;j++,p*=10);
	for(int j=1;j<=K;j++,h0=h0*base+B-1);
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=n;j>=i;j--)
		{
			f[h[j]]++;
			bool c=0;
			for(int k=1;k<=K;k++)
			{
				b[k]=a[i][k]+a[j][k]+c;
				c=(b[k]>=B),b[k]-=c*B;
			}
			if(c||b[K]>=p)
			{
				if(b[K]>=p)
				{
					b[K]-=p;
				}
				for(int k=1;k<=K;k++)
				{
					if(b[k]<B-1)
					{
						b[k]++;
						break;
					}
					b[k]=0;
				}
			}
			bool flag=0;
			unsigned long long h=0;
			for(int k=1;k<=K;k++)
			{
				flag|=b[k];
				h=h*base+B-1-b[k];
			}
			ans+=f[flag?h:H0];
		}
		for(int j=i;j<=n;j++)
		{
			f[h[j]]=0;
		}
	}
	cout<<ans<<endl;
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3556kb

input:

4 1
0
1
10
17

output:

3

result:

ok 1 number(s): "3"

Test #2:

score: 0
Accepted
time: 39ms
memory: 10540kb

input:

500 859
7118711592236878297922359501613604144948355616986970837340677671376753603836852811886591300370143151943368529129749813118476151865844255212534355441611481420938483178075143062691345257288242460282715389758789648541099090735875617822348551942134616963557723055980260082230902505269975518146286...

output:

0

result:

ok 1 number(s): "0"

Test #3:

score: 0
Accepted
time: 384ms
memory: 12828kb

input:

500 17336
11871159223687829792235950161360414494835561698697083734067767137675360383685281188659130037014315194336852912974981311847615186584425521253435544161148142093848317807514306269134525728824246028271538975878964854109909073587561782234855194213461696355772305598026008223090250526997551814628...

output:

0

result:

ok 1 number(s): "0"

Test #4:

score: -100
Wrong Answer
time: 17ms
memory: 5464kb

input:

500 1
751324443898124078584847834484321089092662321556147445230263526014359393841194947303407593948729802551881289193716611867931891257925091769456350249725997883453296895094445731130479434019358742162771547784250401546380268386074363779242500860317042151185119666027858022664683818314351285215150806...

output:

1154545

result:

wrong answer 1st numbers differ - expected: '2327631', found: '1154545'