求助坑点在哪里
查看原帖
求助坑点在哪里
638235
rabbyte楼主2022/3/16 12:41

记录:https://www.luogu.com.cn/record/71509746

代码:

#include<bits/stdc++.h>
#define int long long

using namespace std;

bool flag1;
int T,k;
int a[1001],b[1001],p[1001];
int f[1001];
int jc[1001];
int s[1001][1001],t[1001][1001];
int ksm(int a,int b,int mod){
	int res=1;
	while(b){
		if(b&1)res=1ll*res*a%mod;
		a=1ll*a*a%mod;b>>=1;
	}
	return res;
}
signed main()
{
	scanf("%lld",&T);
	while(T--)
	{
		scanf("%lld",&k);
		for(int i=1;i<=k;i++) scanf("%lld",&a[i]);
		for(int i=1;i<=k;i++) scanf("%lld",&b[i]);
		for(int i=1;i<=k;i++) scanf("%lld",&p[i]);
		for(int i=1;i<=k;i++) s[0][i]=1;
		for(int i=1;i<=k;i++)
		{
			for(int j=1;j<=k;j++)
			{
				s[i][j]=1ll*s[i-1][j]*a[i]%p[j];
				t[i][j]=(1ll*t[i-1][j]*a[i]%p[j]+b[i])%p[j];
//				printf("s[%d][%d]=%d,t[%d][%d]=%d %d %d %d\n",i,j,s[i][j],i,j,s[i][j],a[i],b[i],p[j]);
			}
		}
		bool flag=1;
		for(int i=1;i<=k;i++)
			if(s[i][i]==0&&t[i][i]!=0) flag=0;
		if(!flag)
		{
			puts("No");
			continue;
		}
		for(int i=1;i<=k;i++)
			f[i]=1ll*(p[i]-t[i][i])*ksm(s[i][i],p[i]-2,p[i])%p[i];
		flag1=1;
		for(int i=1;i<=k;i++)
			for(int j=1;j<=k;j++)
				if(p[i]==p[j]&&f[i]!=f[j])flag1=0;
		if(flag1)puts("Yes");
		else puts("No");
		
	}
    return 0;
}
/*
1
3
1 1 1	
2 2 2
3 3 3
*/

找了半天看出来哪里错了qwq

2022/3/16 12:41
加载中...