我的代码:
#include<bits/stdc++.h>
using namespace std;
long long solve(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() {
long long 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=solve(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<<endl;
}
}
最后几个点会TLE。 求篇正解 感觉这个题可以评绿 有没有通过的大佬能去评一下等级