[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个元素(如果 ...
随机推荐
- iOS - Xcode 插件
Xcode 插件 Xcode 插件安装目录: ~/library/Application Support/Developer/Shared/Xcode/Plug-ins Xcode 插件大全 http ...
- 报错 for input String ...
一个String类型的数值后面有空格,如:“10001 ” 要转化成int时用 Integer.parseInt 报错 先用.trim()去掉空格 就可以转换了 这个问题其实 ...
- 将java源文件制成jar包
很多人都在苦恼,如何将写好的程序代码能在日后随时调用和配置在项目中运行 今天,就让梦逸来给大家分享这个过程 首先,创建好一个文件夹,文件夹名称随意 这个文件夹中是用来存放java源文件( 未编译的 x ...
- python新技能get——看!源!码!
上节课一起看了一下ThreadingTCPserver和tornado的源码,真是心力交瘁...后来仔细的想了一下,看懂源码其实并不难,只是需要明确一些以前我们学习过但是却容易被忽视的概念! 再看继承 ...
- 转-Android仿微信气泡聊天界面设计
微信的气泡聊天是仿iPhone自带短信而设计出来的,不过感觉还不错可以尝试一下仿着微信的气泡聊天做一个Demo,给大家分享一下!效果图如下: 气泡聊天最终要的是素材,要用到9.png文件的素材,这样气 ...
- BZOJ2095 [Poi2010]Bridges
首先二分答案...然后这张图变成了有一些有向边,有一些无向边 然后就是混合图欧拉回路的判断 我们知道如果是有向图,它存在欧拉回路的等价条件是所有点的出度等于入度 对于混合图...先不管有向边,把无向边 ...
- iPhone/iPad/Android UI尺寸规范
iPhone界面尺寸
- Rhel6-varnish配置文档
系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.160:virnish apache server60.example ...
- Linux学习 : 裸板调试 之 使用MMU
MMU(Memory Management Unit,内存管理单元),操作系统通过使用处理器的MMU功能实现以下:1)虚拟内存.有了虚拟内存,可以在处理器上运行比实际物理内存大的应用程序.为了使用虚拟 ...
- 实现手机扫描二维码页面登录,类似web微信-第一篇,业务分析
转自:http://www.cnblogs.com/fengyun99/p/3541249.html 关于XMPP组件的文章,先休息两天,好歹已经完整的写了一份. 这两天,先实现一套关于web微信扫描 ...