记录编号 |
274037 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
[NOI 2013]向量内积 |
最终得分 |
100 |
用户昵称 |
神利·代目 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.502 s |
提交时间 |
2016-06-26 11:57:39 |
内存使用 |
20.17 MiB |
显示代码纯文本
/*
神题。。。
题解:
http://dffxtz.logdown.com/posts/197950-noi2013-vector-inner-product
*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 100010
#define M 110
#define rd ((rand_now=((long long)rand_now*19981206+2010527)%1000000009)/97)
#define fastcall __attribute__((optimize("-Os")))
#define IL __inline__ __attribute__((always_inline))
fastcall IL void in(register int&x){for(x=getchar();x<48;x=getchar());x^=48;for(register int tmp=getchar();47<tmp;tmp=getchar())x=x*10+(tmp^48);}
int n,m,mod,rand_now=1000003,a[N][M],q[N],b[M],c[M][M];
inline bool check(int x,int y){
int i,tmp=0;
for(i=1;i<=m;++i)tmp+=a[x][i]*a[y][i];
return !(tmp%mod);
}
inline int sol(int x){
int ans=0,i,j;
if(mod==2){
for(int i=1;i<=m;b[i]^=a[x][i],++i)
ans^=b[i]&a[x][i];
}else{
for(int i=1;i<=m;++i)
for(int j=1;j<=m;c[i][j]+=a[x][i]*a[x][j],++j)
ans+=c[i][j]*a[x][i]*a[x][j];
}return ans%mod;
}
int main(){
freopen("meow.in","r",stdin);
freopen("meow.out","w",stdout);
in(n),in(m),in(mod);
for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)
in(a[i][j]),a[i][j]%=mod;
for(int i=1;i<=n;++i)q[i]=i;
for(int cas=10-mod;cas--;){
if(mod==2)memset(b,0,sizeof b);
else memset(c,0,sizeof c);
for(int i=2;i<=n;++i)std::swap(q[i],q[rd%(i-1)+1]);
for(int i=1;i<=n;++i)if(sol(q[i])!=(i-1)%mod)
for(int j=1;j<i;++j)if(check(q[i],q[j])){
if(q[i]>q[j])std::swap(i,j);
printf("%d %d\n",q[i],q[j]);
return 0;
}
}puts("-1 -1");
//while(1);
}