求个正解
查看原帖
求个正解
712337
XYQ_102楼主2023/11/21 18:12

我的代码:

#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。 求篇正解 感觉这个题可以评绿 有没有通过的大佬能去评一下等级

2023/11/21 18:12
加载中...