[BZOJ 3503][Cqoi 2014]和谐矩阵
我觉得这一题的样例输出一点都不和谐,大家千万别像我一样被坑了……
题目不算难,果然是进错省系列555,不过搞出 O(n*m*2m) 的还是不要挣扎的比较好
我们暴力地推出第 n 行 第 m 列中每个数是第 1 行的哪些数的 nim 和 ——O(n3)
然后再算出 b[j] = a[n][j] xor a[n-1][j] xor a[n][j+1] xor a[n][j-1]
就有了一个似是而非的一个抑或方程组,因为如果去解的话结果一定是 xi=0
怎么办呢?
既然题目说一定有解,必然存在一个 xi=1 , 我们就暴力枚举!然后尝试解方程组即可 ——O(n4)
#include <cstdio>
#include <cstring>
const int sizeOfMatrix=; int m, n;
inline int getint();
inline void putint(bool); struct node
{
bool a[sizeOfMatrix];
inline node() {memset(a, , sizeof(a));}
inline bool & operator [] (int x) {return a[x];}
};
inline node operator ^ (node a, node b)
{
node c;
for (int i=;i<=n;i++) c[i]=a[i]^b[i];
return c;
} node a[sizeOfMatrix][sizeOfMatrix];
node f[sizeOfMatrix];
bool b[sizeOfMatrix][sizeOfMatrix];
bool x[sizeOfMatrix];
inline void swap(bool & , bool & );
inline bool solve(int);
inline bool calc(int, int); int main()
{
m=getint(), n=getint();
for (int i=;i<=n;i++) a[][i][i]=true;
for (int i=;i<=m;i++)
for (int j=;j<=n;j++)
a[i][j]=a[i-][j]^a[i-][j-]^a[i-][j+]^a[i-][j];
for (int i=;i<=n;i++)
f[i]=a[m][i]^a[m][i-]^a[m][i+]^a[m-][i]; for (int i=;i<=n;i++)
if (solve(i))
break; for (int i=;i<=m;i++)
{
for (int j=;j<=n;j++)
putint(calc(i, j));
putchar('\n');
} return ;
}
inline int getint()
{
register int num=;
register char ch;
do ch=getchar(); while (ch<'' || ch>'');
do num=num*+ch-'', ch=getchar(); while (ch>='' && ch<='');
return num;
}
inline void putint(bool num)
{
if (num) putchar('');
else putchar('');
putchar(' ');
}
inline void swap(bool & a, bool & b)
{
bool t=a; a=b; b=t;
}
inline bool solve(int k)
{
for (int i=;i<=n;i++)
{
for (int j=;j<=n;j++)
b[i][j]=f[i][j];
if (f[i][k]==true)
b[i][k]=false, b[i][n+]=true;
}
for (int i=;i<=n;i++)
{
if (!b[i][i])
{
for (int j=i+;j<=n;j++) if (b[j][i])
{
for (int k=;k<=n+;k++)
swap(b[j][k], b[i][k]);
break;
}
} if (!b[i][i]) continue; for (int j=i+;j<=n;j++) if (b[j][i])
for (int k=i;k<=n+;k++)
b[j][k]^=b[i][k];
} x[k]=true;
for (int i=n;i>=;i--)
{
if (!b[i][i]) continue;
x[i]=b[i][n+];
for (int j=n-;j>=;j--) if (b[j][i])
b[j][i]=false, b[j][n+]^=x[i];
} for (int i=;i<=n;i++)
{
bool check=false;
for (int j=;j<=n;j++) if (f[i][j])
check^=x[j];
if (check) return false;
} return true;
}
inline bool calc(int i, int j)
{
bool ans=false;
for (int k=;k<=n;k++) if (a[i][j][k])
ans^=x[k];
return ans;
}
我的心已片片飘落
[BZOJ 3503][Cqoi 2014]和谐矩阵的更多相关文章
- 解题:CQOI 2013 和谐矩阵
题面 踩踩时间复杂度不正确的高斯消元 首先可以发现第一行确定后就可以确定整个矩阵,所以可以枚举第一行的所有状态然后$O(n)$递推检查是否合法 $O(n)$递推的方法是这样的:设$pre$为上一行,$ ...
- BZOJ 3505 CQOI 2014 数三角形 数学
标题效果:到m*n该网络格,问:有网络格是一个三角形的顶点的数目. 思维:数学.首先计算所有三个相同的,不.然后,在上线的一个点失去了三个点是其中.需要注意的是,答案开放long long. CODE ...
- 【BZOJ】【3503】【CQOI2014】和谐矩阵
高斯消元解Xor方程组 Orz ZYF o(︶︿︶)o 唉我的数学太烂了…… 错误思路:对每个格点进行标号,然后根据某5个异或和为0列方程组,高斯消元找自由元……(目测N^3会TLE) ZYF的正确思 ...
- BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )
偶数个相邻, 以n*m个点为变量, 建立异或方程组然后高斯消元... O((n*m)^3)复杂度看起来好像有点大...但是压一下位的话就是O((n*m)^3 / 64), 常数小, 实际也跑得很快. ...
- BZOJ 3503 [CQOI2014]和谐矩阵
题目链接 BZOJ 3503 题解 没想到--直接用暴力的\(O((nm)^3)\)算法,居然能过?! 高斯消元解异或方程组. #include <cstdio> #include < ...
- bzoj千题计划105:bzoj3503: [Cqoi2014]和谐矩阵(高斯消元法解异或方程组)
http://www.lydsy.com/JudgeOnline/problem.php?id=3503 b[i][j] 表示i对j是否有影响 高斯消元解异或方程组 bitset优化 #include ...
- 3503: [Cqoi2014]和谐矩阵
3503: [Cqoi2014]和谐矩阵 链接 分析: 对于每个点,可以列出一个方程a[i][j]=a[i][j-1]^a[i][j+1]^a[i-1][j]^a[i+1][j],于是可以列出n*m个 ...
- 【高斯消元】BZOJ3503 [Cqoi2014]和谐矩阵
3503: [Cqoi2014]和谐矩阵 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1197 Solved: ...
- BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元
BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元 题意: 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本身,及他上下左右的4个元素(如果 ...
随机推荐
- (原创)LAMP搭建之一:图解如何安装并检查LAMP
LAMP搭建之一:图解如何安装并检查LAMP 第一步:安装Linux(RedHat5) 第二步:rpm -qa httpd(查看apache是否安装) rpm -qa php(查看php是否安装) r ...
- js执行顺序<转>
JavaScript执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的.而且在分析执行同一段代码中,定义式的函数语句会被提取出来优先执行.函数定义执行完后,才会按顺序执行其他代码. 先看看 ...
- Nginx 1.10.2 php 7 环境安装
1.安装编译工具和库文件,红色部分提示在centos镜像站点上查不到包,用yum安装的时候要认真看那些包没有找到,用yum的时候尽量不要使用-y选项 yum install gcc automake ...
- contiki-main.c 文件的进程分析
基本进程的创建实例: 共三部分:创建进程.进程自启动和进程的主体部分 /* 声明一个名为hello_world_process和led_process进程 PROCESS 宏实际上声明一个函数并定义一 ...
- 如何让IE8的菜单栏调到最上方
如何让IE8的菜单栏调到最上方 运行gpedit.msc,在"用户配置"/"管理模板"/"Windows Components"/" ...
- shell编程—— EOF
在shell编程中,”EOF“通常与”<<“结合使 用,“<<EOF“表示后续的输入作为子命令或子shell的输入,直到遇到”EOF“,再次返回到主调shell,可将其理解为分 ...
- 关于H5中自定义属性的设置和获取
自定义数据属性是在HTML5中新加入的一个特性.简单来说,自定义数据属性规范规定任何以data-开头属性名并且赋值.自定义数据属性是为了保存页面或者应用程序的私有自定义数据,这些自定义数据属性保存进D ...
- while 和 for 对比
for 语句实例 本例中的循环使用 for 循环来显示 cars 数组中的所有值: cars=["BMW","Volvo","Saab",& ...
- 修改placeholder提示内容的颜色以及文本框输入文字内容的颜色
一般表单文本框提示信息:placeholder=" ",默认颜色是灰色的,输入文本信息也是默认为黑色的,如图所示: 修改placeholder提示内容的颜色关键代码及实现: 实现输 ...
- APIO2015 酱油记
Day 0 昨天CTSC才比完,当然是要浪啦! 于是浪了一天...午饭都没吃... 晚饭...貌似也没吃... 晚上的时候觉得这样子浪不太好,还是要认真一下,打开bzoj,弃疗了...还是浪吧... ...