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都被消除了,没有影响答案,而每次操作都只改变对角线上的某一个数,即将答案取反,所以只要统计下操作数,如果操作数为奇数则输出的答案取反。
给你一个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; }
相关文章推荐
- js中获取上下文路径的方法
- Ubuntu 12.04 root用户登录设置
- async whilst使用注意
- Scrollview中嵌套ListView(自定义组件解决)
- Retrofit基本介绍和简单的使用方式
- 自定义ProgressBar
- iOS 获取当前设备型号iPhone7/iPhone7P
- NYOJ九九乘法表
- mysql查询更新时的锁表机制分析(只介绍了MYISAM)
- theano学习笔记(二) :基础
- 第一章:Http概述
- mysql数据库引擎MyISAM和InnoDB的比较和使用场合
- Cloudera 5.7集群部署(四)--KAFKA集成
- Android电池检测(2)
- Cloudera 5.7集群部署(四)--KAFKA集成
- Cloudera 5.7集群部署(四)--KAFKA集成
- Cloudera 5.7集群部署(四)--KAFKA集成
- Cloudera 5.7集群部署(四)--KAFKA集成
- Cloudera 5.7集群部署(四)--KAFKA集成
- Cloudera 5.7集群部署(四)--KAFKA集成