求助,本地过了,输出和答案一样但是WA
查看原帖
求助,本地过了,输出和答案一样但是WA
251882
蒟蒻丁楼主2021/2/23 14:02
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll int
using namespace std;
ll n,m,k,sum[111],c[111][111],T(7);

struct array{
	ll a[111],id;
}A[100010];

ll work(ll x){
	ll tmp=0;
	if(k==2){
		for(ll i=1;i<=m;i++){
			tmp+=sum[i]*A[x].a[i];
			sum[i]=(sum[i]+A[x].a[i])%k;
		}
	}
	else {
		for(ll i=1;i<=m;i++){
			for(ll j=1;j<=m;j++){
				tmp+=c[i][j]*A[x].a[i]*A[x].a[j];
				c[i][j]+=A[x].a[i]*A[x].a[j];
			}
		}
	}
	return tmp%m;
}

int main(){
	scanf("%d%d%d",&n,&m,&k);
	for(ll i=1;i<=n;i++){
		for(ll j=1;j<=m;j++){
			scanf("%d",&A[i].a[j]);
			A[i].a[j]%=k;
		}
		A[i].id=i;
	}
	while(T--){
		ll pos=-1,Pos=-1;
		memset(sum,0,sizeof(sum));
		memset(c,0,sizeof(c));
		random_shuffle(A+1,A+n+1);
		for(ll i=1;i<=n;i++){
			if(work(i)!=((i-1)%k)){
				pos=i;
				break;
			}
		}
		if(pos==-1)continue;
		for(ll i=1;i<pos;i++){
			ll tmp=0;
			for(ll j=1;j<=m;j++){
				tmp+=A[i].a[j]*A[pos].a[j];
			}
			if(tmp%k==0){
				Pos=i;
				break;
			}
		}
		if(A[pos].id>A[Pos].id)swap(Pos,pos);
		pos=A[pos].id,Pos=A[Pos].id;
		printf("%d %d\n",pos,Pos);
		return 0;
	}
	cout<<"-1 -1"<<endl;
}
2021/2/23 14:02
加载中...