谁知道怎样特判后5个点?
代码:
#include<iostream>
using namespace std;
long long ckkp(long long n,long long i,long long p,long long *pa,long long *pb,int *pz)
{
long long a=*pa;
long long b=*pb;
int z=*pz;
if(i==-1)return 1;
int _a=(n-i)%p;
int _b=(i+1)%p;
if(_a==0)
{
z++;
_a=(n-i)/p;
while(_a%p==0)
{
z++;
_a/=p;
}
}
if(_b==0)
{
z--;
_b=(i+1)/p;
while(_b%p==0)
{
z--;
_b/=p;
}
}
a*=_a;
b*=_b;
a%=p;
b%=p;
*pa=a;
*pb=b;
*pz=z;
if(z>0)return 0;
if(z<0)throw 0;
while(a%b)
a+=p;
return a/b;
}
int main()
{
int t;
cin>>t;
long long temp;
long long result;
long long x,y,p,k;
long long fc;
for(long long i=0;i<t;i++)
{
cin>>x>>y>>p>>k;
for(long long j=0;j<k;j++)
cin>>temp;
x=x/10+((x%10>0)?1:0);
y=y/10+((y%10>0)?1:0);
fc=x+y-1;
long long po=1;
for(long long i=0;i<fc;i++)
po=po*2%p;
long long gc=0;
long long preA=1,preB=1;
int __z=0;
for(long long i=0;i<x;i++)
{
long long h=ckkp(fc,i-1,p,&preA,&preB,&__z);
gc+=h;
gc%=p;
}
for(long long i=0;i<p;i++)
{
long long test=(i*po)%p;
if(test==gc)
{
result=i;
break;
}
}
cout<<result<<'\n';
}
return 0;
}