今天下午Virtual了一套最近的CF题,第三题给TLE了,就跑过去上课了。

这题给定一个由二进制表示的矩阵,当询问3的时候,求矩阵的值,矩阵的值是所有第i行乘以第i列的值的总和,然后还有1 b是翻转b行的数字 2 b是翻转b列的数字

一开始没怎么考虑复杂度,就直接想暴力过,觉得只要把翻转先暂存,最后有询问3的时候再pushdown再计算一下结果。。。简直不经大脑思考,有10^6询问,我这样做,如果询问全部是3,那光是计算矩阵10^6次就能达到12次方的复杂度。。。真是一点都不考虑。。。

后来在课上想了点方法,觉得把每一行和列的翻转都预处理一下,以及先把原始结果预处理出来,然后遇到翻转就跟之前的状态比一下看看要不要翻转结果的值。、。。遇到3就可以直接输出了,这样做还是WA了。。。

结果后来搜题解,发现,这个题目真的是个规律水题啊啊啊。。。很明显,n*n的矩阵如果是按i行与i列相乘的和作为结果的话,那么非对角线的元素都会与对称位相乘,并且还会加两次,同一个二进制值相加两次,那不就相当于没加,也就是说只有对角线的元素对结果有影响。。。。

想到这里真是要哭了,那不就很简单的一题目,先按位跟对角线的值异或得到初始结果,然后底下但凡有翻转操作,就把结果翻转(因为每次行或者列的翻转必定造成对角线某个元素翻转,也就直接造成结果翻转)。。然后遇到3直接输出结果即可啦

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5. int mat[][];
  6. //int row[1010],col[1010]
  7. int n,q;
  8. //int change[1010][2][2];
  9. //int pr[1010],pc[1010];
  10. //void putdown()
  11. //{
  12. // for (int i=1;i<=n;i++)
  13. // {
  14. // if (row[i])
  15. // {
  16. // for (int j=1;j<=n;j++)
  17. // {
  18. // mat[i][j]^=1;
  19. // }
  20. // row[i]=0;
  21. // }
  22. // if (col[i])
  23. // {
  24. // for (int j=1;j<=n;j++)
  25. // {
  26. // mat[j][i]^=1;
  27. // }
  28. // col[i]=0;
  29. // }
  30. // }
  31. //}
  32. //int counts()
  33. //{
  34. // int ans=0;
  35. // for (int i=1;i<=n;i++)
  36. // {
  37. // int t=0;
  38. // for (int j=1;j<=n;j++)
  39. // {
  40. // int tmp=mat[i][j]*mat[j][i];
  41. // ans+=tmp;
  42. // t+=tmp;
  43. // //change[i][0][0]=tmp;
  44. // }
  45. // change[i][0][0]=t%2;
  46. // }
  47. // ans%=2;
  48. // return ans;
  49. //
  50. //}
  51. //void init()
  52. //{
  53. // for (int i=1;i<=n;i++)
  54. // {
  55. // int t1,t2,t3;
  56. // t1=t2=t3=0;
  57. // for (int j=1;j<=n;j++)
  58. // {
  59. //
  60. // if (j==1)
  61. // {
  62. // t1+=(1-mat[i][j])*(1-mat[j][i]);
  63. // t2+=(1-mat[i][j])*(1-mat[j][i]);
  64. // t3+=(1-mat[i][j])*(1-mat[j][i]);
  65. // }
  66. // else
  67. // {
  68. // t1+=(1-mat[i][j])*mat[j][i];
  69. // t2+=mat[i][j]*(1-mat[j][i]);
  70. // t3+=(1-mat[i][j])*(1-mat[j][i]);
  71. // }
  72. // }
  73. // change[i][1][0]=t1%2;
  74. // //change[i][1][0]^=change[i][0][0];
  75. //
  76. // change[i][0][1]=t2%2;
  77. // //change[i][0][1]^=change[i][0][0];
  78. //
  79. // change[i][1][1]=t3%2;
  80. // //change[i][1][1]^=change[i][0][0];
  81. // //cout<<change[i][1][0]<<" "
  82. // }
  83. //}
  84. int main()
  85. {
  86. int a,b;
  87. // freopen("CF_238.txt","w",stdout);
  88. while (scanf("%d",&n)!=EOF)
  89. {
  90. for (int i=;i<=n;i++)
  91. {
  92. for (int j=;j<=n;j++)
  93. {
  94. scanf("%d",&mat[i][j]);
  95. }
  96. //pr[i]=pc[i]=0;
  97. }
  98. int ans=;
  99. for (int i=;i<=n;i++)
  100. ans=ans^mat[i][i];
  101. //init();
  102. //int ans=counts();
  103.  
  104. scanf("%d",&q);
  105. for (int i=;i<q;i++)
  106. {
  107. scanf("%d",&a);
  108. if (a<)
  109. {
  110. scanf("%d",&b);
  111. ans^=;
  112. }
  113. else
  114. {
  115. //putdown();
  116. //counts();
  117. printf("%d",ans);
  118. }
  119. }
  120. printf("\n");
  121. }
  122. }

Codeforces 400C 矩阵乘法 数学规律的更多相关文章

  1. Codeforces C. Almost Equal (数学规律)

    题目链接:http://codeforces.com/contest/1206/problem/C 题解 : 观察可以发现当n为偶数时,1 - 2n是不满足题意的,可以举例n = 2,n = 4试一试 ...

  2. 【BZOJ2326】【HNOI2011】数学作业 [矩阵乘法][DP]

    数学作业 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Input 输入文件只有一行为用空 ...

  3. Codeforces 715A & 716C Plus and Square Root【数学规律】 (Codeforces Round #372 (Div. 2))

    C. Plus and Square Root time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  4. Codeforces 1106F Lunar New Year and a Recursive Sequence | BSGS/exgcd/矩阵乘法

    我诈尸啦! 高三退役选手好不容易抛弃天利和金考卷打场CF,结果打得和shi一样--还因为queue太长而unrated了!一个学期不敲代码实在是忘干净了-- 没分该没分,考题还是要订正的 =v= 欢迎 ...

  5. 矩阵乘法在numpy/matlab/数学上的不同

    数学意义上的矩阵乘法 注意事项: 1.当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘. 2.矩阵C的行数等于矩阵A的行数,C的列数等于B的列数. 3.乘积C的第m行第n列的 ...

  6. 矩阵乘法快速幂 cojs 1717. 数学序列

    矩阵乘法模板: #define N 801 #include<iostream> using namespace std; #include<cstdio> int a[N][ ...

  7. Codeforces 506E - Mr. Kitayuta's Gift(神仙矩阵乘法)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙题 %%%%%%%%%%%%% u1s1 感觉这道题风格很省选( 下记 \(m=|s|\),首先探讨 \(n+m\) 为偶数的情形. ...

  8. Codeforces 1368H - Breadboard Capacity(最小割+线段树维护矩阵乘法)

    Easy version:Codeforces 题面传送门 & 洛谷题面传送门 Hard version:Codeforces 题面传送门 & 洛谷题面传送门 首先看到这种从某一种颜色 ...

  9. Codeforces 750E - New Year and Old Subsequence(线段树维护矩阵乘法,板子题)

    Codeforces 题目传送门 & 洛谷题目传送门 u1s1 我做这道 *2600 的动力是 wjz 出了道这个套路的题,而我连起码的思路都没有,wtcl/kk 首先考虑怎样对某个固定的串计 ...

随机推荐

  1. 洛谷题解P1047 校门外的树

    题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,…,L,都种有 ...

  2. VMWare 禁用vmem虚拟内存文件

    使用 VMWare 虚拟机,虚拟机启动后,会在虚拟机目录下建立一个与虚拟内存大小相同的 .vmem文件 这个文件主要是将虚拟机内存的内容映射到磁盘,以支持在虚拟机的暂停等功能 对所有的虚拟机" ...

  3. SQLlite的olestr

    关于SQLite的connection string说明:http://www.connectionstrings.com/sqlite/ SQLite GUI客户端列表:http://www.sql ...

  4. Xmanager 实现图形化安装CentOS7上的软件

    Xmanager 是个很不错的工具,集成Xshell,Xftp,Xstart,Xbrowser等常用的远程工具. 当前需求为:有个软件,哑安装(静默安装)方式,在安装时会遇到配置文件加载不全,安装成功 ...

  5. 将.py文件转化成.exe

    机子上已经安装好python,且配置好环境变量 编写好xx.py文件 安装pywin32.此处一定注意pywin32有32位和64位之分.可以在命令提示符里输入python来查看python的版本以及 ...

  6. UVA - 1451 Average (斜率优化)

    题意:由01组成的长度为n的子串,AT由0表示,GC由1表示,求一段长度大于等于L且GC率最高的子串的起始终止坐标,若GC率相同,取长度较小,若长度相同,取起始坐标最小. 分析: 1.一个子串(i+1 ...

  7. 转载-Logistic回归总结

     Logistic回归总结 作者:洞庭之子 微博:洞庭之子-Bing (2013年11月) 1.引言 看了Stanford的Andrew Ng老师的机器学习公开课中关于Logistic Regress ...

  8. 深入浅出KNN算法

    概述 K最近邻(kNN,k-NearestNeighbor)分类算法 所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表. kNN算法的核心思想是如果一个样本在特征 ...

  9. 115-PHP实例化和不实例化输出类常量

    <?php class boy{ //定义男孩类 const sex='男'; public $age=15; } echo '不实例化对象输出类常量:'.boy::sex; $boy=new ...

  10. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring事务管理接口PlatformTransactionManager、TransactionDefinition和TransactionStatus

    Spring 的事务管理是基于 AOP 实现的,而 AOP 是以方法为单位的.Spring 的事务属性分别为传播行为.隔离级别.只读和超时属性,这些属性提供了事务应用的方法和描述策略. 在 Java ...