您的位置:首页 > 其它

Codeforces 405C Unusual Product

2016-07-16 18:20 295 查看
题意:

给你一个n*n的01矩阵,定义一个unusual square的计算模式,接下来有1,2,3三种操作,1为将某一行的数全部取反,2为将某一列的数全部取反,3为unusual
square的值,该值为模2后的值。

思路:

假设有一个矩阵为


那么该矩阵的unusual
square值为(a1*a1+a2*b1+a3*c1)+(a2*b1+b2*b2+b3*c2)+(a3*c1+b3*c2+c3*c3)

整理下为(a1*a1)+(b2*b2)+(c3*c3)+2*(a2*b1)+2*(a3*c1)+2*(b3*c2)可以发现,最后的答案仅有(a1*a1)+(b2*b2)+(c3*c3),即对角线的值决定,其他的由于答案模2都被消除了,没有影响答案,而每次操作都只改变对角线上的某一个数,即将答案取反,所以只要统计下操作数,如果操作数为奇数则输出的答案取反。

#include<cstdio>

const int MAX=1e6+5;
char s[MAX];

int main(){
int n;
scanf("%d",&n);
int a;
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&a);
if(i==j) ans+=a;
}
}
ans%=2;
int q,cnt=0,num=0,op;
scanf("%d",&q);
while(q--){
scanf("%d",&op);
if(op==3){
if(num%2) ans=1-ans;
s[cnt++]=ans+'0';
num=0;
}
else{
scanf("%d",&a);
num++;
}
}
s[cnt]='\0';
printf("%s\n",s);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: