60分求助
查看原帖
60分求助
65600
masa楼主2021/7/29 21:53

40分都是wa

源码如下 变量有注释

#include<iostream>
#include<cstdio>
using namespace std;
long long n,k,t,m,sum,N,a[2010][2010],f[2010],h[2020][2020];//a[i][j]存放C(i,j)的值,f[i]存放k|C(i,1~j)的和,h[i][j]存放n,m的答案 
inline long long read()
{
	long long x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9')
	{
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
void xhy(long long p)
{
	a[p][1]=p;
	if(p%k==0)f[p]++;
	h[p][1]=h[p-1][1]+f[p];
	for(int i=2;i<=p;i++)
	{
		a[p][i]=a[p][i-1]*(p+1-i)/i;
		if(a[p][i]%k==0)f[p]++;
		if(i!=p)h[p][i]=h[p-1][i]+f[p];
		if(i==p)h[p][i]=h[p-1][i-1]+f[p];
	}
}
int main()
{
	t=read(),k=read();
	for(;t>0;--t)
	{
		sum=0;
		n=read(),m=read();
		if(n>N)
		{
			for(int i=N+1;i<=n;i++)
    		{
    			xhy(i);
    			f[i]+=f[i-1];
    		}
    		N=n;
		}
		if(m>=n)
		{
			cout<<h[n][n]<<"\n";
			continue;
		}
		cout<<h[n][m]<<"\n";
	}
}
2021/7/29 21:53
加载中...