Codeforces 400C 矩阵乘法 数学规律
今天下午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直接输出结果即可啦
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- using namespace std;
- int mat[][];
- //int row[1010],col[1010]
- int n,q;
- //int change[1010][2][2];
- //int pr[1010],pc[1010];
- //void putdown()
- //{
- // for (int i=1;i<=n;i++)
- // {
- // if (row[i])
- // {
- // for (int j=1;j<=n;j++)
- // {
- // mat[i][j]^=1;
- // }
- // row[i]=0;
- // }
- // if (col[i])
- // {
- // for (int j=1;j<=n;j++)
- // {
- // mat[j][i]^=1;
- // }
- // col[i]=0;
- // }
- // }
- //}
- //int counts()
- //{
- // int ans=0;
- // for (int i=1;i<=n;i++)
- // {
- // int t=0;
- // for (int j=1;j<=n;j++)
- // {
- // int tmp=mat[i][j]*mat[j][i];
- // ans+=tmp;
- // t+=tmp;
- // //change[i][0][0]=tmp;
- // }
- // change[i][0][0]=t%2;
- // }
- // ans%=2;
- // return ans;
- //
- //}
- //void init()
- //{
- // for (int i=1;i<=n;i++)
- // {
- // int t1,t2,t3;
- // t1=t2=t3=0;
- // for (int j=1;j<=n;j++)
- // {
- //
- // if (j==1)
- // {
- // t1+=(1-mat[i][j])*(1-mat[j][i]);
- // t2+=(1-mat[i][j])*(1-mat[j][i]);
- // t3+=(1-mat[i][j])*(1-mat[j][i]);
- // }
- // else
- // {
- // t1+=(1-mat[i][j])*mat[j][i];
- // t2+=mat[i][j]*(1-mat[j][i]);
- // t3+=(1-mat[i][j])*(1-mat[j][i]);
- // }
- // }
- // change[i][1][0]=t1%2;
- // //change[i][1][0]^=change[i][0][0];
- //
- // change[i][0][1]=t2%2;
- // //change[i][0][1]^=change[i][0][0];
- //
- // change[i][1][1]=t3%2;
- // //change[i][1][1]^=change[i][0][0];
- // //cout<<change[i][1][0]<<" "
- // }
- //}
- int main()
- {
- int a,b;
- // freopen("CF_238.txt","w",stdout);
- while (scanf("%d",&n)!=EOF)
- {
- for (int i=;i<=n;i++)
- {
- for (int j=;j<=n;j++)
- {
- scanf("%d",&mat[i][j]);
- }
- //pr[i]=pc[i]=0;
- }
- int ans=;
- for (int i=;i<=n;i++)
- ans=ans^mat[i][i];
- //init();
- //int ans=counts();
- scanf("%d",&q);
- for (int i=;i<q;i++)
- {
- scanf("%d",&a);
- if (a<)
- {
- scanf("%d",&b);
- ans^=;
- }
- else
- {
- //putdown();
- //counts();
- printf("%d",ans);
- }
- }
- printf("\n");
- }
- }
Codeforces 400C 矩阵乘法 数学规律的更多相关文章
- Codeforces C. Almost Equal (数学规律)
题目链接:http://codeforces.com/contest/1206/problem/C 题解 : 观察可以发现当n为偶数时,1 - 2n是不满足题意的,可以举例n = 2,n = 4试一试 ...
- 【BZOJ2326】【HNOI2011】数学作业 [矩阵乘法][DP]
数学作业 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Input 输入文件只有一行为用空 ...
- 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 ...
- Codeforces 1106F Lunar New Year and a Recursive Sequence | BSGS/exgcd/矩阵乘法
我诈尸啦! 高三退役选手好不容易抛弃天利和金考卷打场CF,结果打得和shi一样--还因为queue太长而unrated了!一个学期不敲代码实在是忘干净了-- 没分该没分,考题还是要订正的 =v= 欢迎 ...
- 矩阵乘法在numpy/matlab/数学上的不同
数学意义上的矩阵乘法 注意事项: 1.当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘. 2.矩阵C的行数等于矩阵A的行数,C的列数等于B的列数. 3.乘积C的第m行第n列的 ...
- 矩阵乘法快速幂 cojs 1717. 数学序列
矩阵乘法模板: #define N 801 #include<iostream> using namespace std; #include<cstdio> int a[N][ ...
- Codeforces 506E - Mr. Kitayuta's Gift(神仙矩阵乘法)
Codeforces 题目传送门 & 洛谷题目传送门 神仙题 %%%%%%%%%%%%% u1s1 感觉这道题风格很省选( 下记 \(m=|s|\),首先探讨 \(n+m\) 为偶数的情形. ...
- Codeforces 1368H - Breadboard Capacity(最小割+线段树维护矩阵乘法)
Easy version:Codeforces 题面传送门 & 洛谷题面传送门 Hard version:Codeforces 题面传送门 & 洛谷题面传送门 首先看到这种从某一种颜色 ...
- Codeforces 750E - New Year and Old Subsequence(线段树维护矩阵乘法,板子题)
Codeforces 题目传送门 & 洛谷题目传送门 u1s1 我做这道 *2600 的动力是 wjz 出了道这个套路的题,而我连起码的思路都没有,wtcl/kk 首先考虑怎样对某个固定的串计 ...
随机推荐
- 洛谷题解P1047 校门外的树
题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,…,L,都种有 ...
- VMWare 禁用vmem虚拟内存文件
使用 VMWare 虚拟机,虚拟机启动后,会在虚拟机目录下建立一个与虚拟内存大小相同的 .vmem文件 这个文件主要是将虚拟机内存的内容映射到磁盘,以支持在虚拟机的暂停等功能 对所有的虚拟机" ...
- SQLlite的olestr
关于SQLite的connection string说明:http://www.connectionstrings.com/sqlite/ SQLite GUI客户端列表:http://www.sql ...
- Xmanager 实现图形化安装CentOS7上的软件
Xmanager 是个很不错的工具,集成Xshell,Xftp,Xstart,Xbrowser等常用的远程工具. 当前需求为:有个软件,哑安装(静默安装)方式,在安装时会遇到配置文件加载不全,安装成功 ...
- 将.py文件转化成.exe
机子上已经安装好python,且配置好环境变量 编写好xx.py文件 安装pywin32.此处一定注意pywin32有32位和64位之分.可以在命令提示符里输入python来查看python的版本以及 ...
- UVA - 1451 Average (斜率优化)
题意:由01组成的长度为n的子串,AT由0表示,GC由1表示,求一段长度大于等于L且GC率最高的子串的起始终止坐标,若GC率相同,取长度较小,若长度相同,取起始坐标最小. 分析: 1.一个子串(i+1 ...
- 转载-Logistic回归总结
Logistic回归总结 作者:洞庭之子 微博:洞庭之子-Bing (2013年11月) 1.引言 看了Stanford的Andrew Ng老师的机器学习公开课中关于Logistic Regress ...
- 深入浅出KNN算法
概述 K最近邻(kNN,k-NearestNeighbor)分类算法 所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表. kNN算法的核心思想是如果一个样本在特征 ...
- 115-PHP实例化和不实例化输出类常量
<?php class boy{ //定义男孩类 const sex='男'; public $age=15; } echo '不实例化对象输出类常量:'.boy::sex; $boy=new ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring事务管理接口PlatformTransactionManager、TransactionDefinition和TransactionStatus
Spring 的事务管理是基于 AOP 实现的,而 AOP 是以方法为单位的.Spring 的事务属性分别为传播行为.隔离级别.只读和超时属性,这些属性提供了事务应用的方法和描述策略. 在 Java ...