今天下午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 矩阵乘法 数学规律的更多相关文章

  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. 收藏!阿里云maven镜像配置文件

    <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...

  2. (四)Flex 布局教程和例子

    布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. 1.flex-direction ...

  3. 106-PHP查看类成员属性

    <?php class mao{ //定义猫类 public $age; //定义多个成员属性 protected $weight; private $color; } $mao1=new ma ...

  4. Vue.js(23)之 keepAlive和activated

    阅读: vue中前进刷新.后退缓存用户浏览数据和浏览位置的实践 keep-alive 组件级缓存 keep-alive <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而 ...

  5. XTU 1205 Range

    还是五月湘潭赛的题目,当时就是因为我坑...连个银牌都没拿到,擦. 这个题目枚举区间是不可能的,明显是要考虑每个数对全局的影响,即找到每个数最左和最右能满足是最大的位置 以及 最小的时候,相乘即为该数 ...

  6. qt 中使用 c 语言文件

    qt 中直接使用 c 语言文件,c 文件可以直接包含,h 文件包含的时候,需要在 c++ 中添加额外信息,如下: #ifdef __cplusplus extern "C" { # ...

  7. C#当前程序路径获取

    //获取当前进程的完整路径,包含文件名(进程名).string str = this.GetType().Assembly.Location;result: X:\xxx\xxx\xxx.exe (. ...

  8. python+opencv+dlib瘦脸效果

    对实现人脸瘦脸简单功能的一个记录,大概流程如下: 1.使用dlib检测出人脸关键点 2.使用Interactive Image Warping 局部平移算法实现瘦脸 参考:https://blog.c ...

  9. Spring 控制反转容器(Inversion of Control – IOC)

    系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Contro ...

  10. case...when...和decode——oracle

    1.decode函数: 用法:decode(条件,值1,翻译1,值2,翻译2,......,缺省值): 例子: ','失败','未知') from table t1;--改变字段的显示值 ,变量1,变 ...