Wannafly挑战赛18C 异或和
傻逼题,和期望没毛关系。。。
分开xy坐标,n方直接统计每个坐标的曼蛤顿距离即可。。
#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
#define mod 1000000007
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
char s[2010][2010];
int n,m,ans,sx[2010],sy[2010];
ll SX[2010],SY[2010],inv,xx,yy;
int main(){
#ifndef ONLINE_JUDGE
freopen("129c.in","r",stdin);
freopen("129c.out","w",stdout);
#endif
n=gi(),m=gi();
for(int i=1;i<=n;++i)scanf("%s",s[i]+1);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(s[i][j]=='1')
++sx[i],++sy[j],++xx;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j)
SX[i]+=sx[j]*abs(i-j);
SX[i]%=mod;
}
for(int i=1;i<=m;++i){
for(int j=1;j<=m;++j)
SY[i]+=sy[j]*abs(i-j);
SY[i]%=mod;
}
yy=mod-2;inv=1;
while(yy){
if(yy&1)inv=inv*xx%mod;
xx=xx*xx%mod;yy>>=1;
}
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
ans^=(SX[i]+SY[j])*inv%mod;
printf("%d\n",ans);
return 0;
}
博主是蒟蒻,有问题请指出,谢谢!
本博客中博文均为原创,未经博主允许请勿随意转载,谢谢。
本博客中博文均为原创,未经博主允许请勿随意转载,谢谢。