[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个元素(如果 ...
随机推荐
- Security » Authorization » 基于自定义策略的授权
Custom Policy-Based Authorization¶ 基于自定义策略的授权 98 of 108 people found this helpful Underneath the cov ...
- Java 中的 request 和response 理解
request和response(请求和响应) 1.当Web容器收到客户端的发送过来http请求,会针对每一次请求,分别创建一个用于代表此次请求的HttpServletRequest对象(reque ...
- WPF仿Word头部格式,涉及DEV RibbonControl,NarvbarControl,ContentPresenter,Navigation
时隔1个月,2015/06/17走进新的环境. 最近一个星期在学习仿Word菜单栏的WPF实现方式,废话不多说,先看一下效果. 打开界面后,默认选中[市场A],A对应的菜单栏,如上图, 选择[市场B] ...
- git: No refs in common and none specified; doing no
用gitolite新建项目,clone后首次push,可能会出现: $ git push No refs in common and none specified; doing nothing ...
- 如何有效使用Project(1)——编制进度计划、保存基准
1.前言: 软件产品的研发.升级.定制等,一般都是以项目的形式进行,此时项目进度计划以及资源使用情况就变成了项目经理关注的重点.如何让项目计划有效可控,及时暴露问题?如何查看资源的负荷情况,看资源分配 ...
- css布局左右技巧分享
无意之间发现左右侧布局很多技巧在里边,接下来分享下实例: <div style="width:40px;height:36px;float:left;overflow:hidden; ...
- apache开启.htaccess
1 . 如何让的本地APACHE开启.htaccess 如何让的本地APACHE开启.htaccess呢?其实只要简朴修改一下apache的httpd.conf设置就让APACHE.htaccess了 ...
- linux 查看剩余内存数
返回的是kb的数值 cat /proc/meminfo | grep MemFree | cut -d ":" -f2 | sed -e 's/\(^ *\)//' -e 's/\ ...
- OC面向对象—封装
OC面向对象—封装 一.面向对象和封装 面向对象的三大特性:封装(成员变量).继承和多态 在OC语言中,使用@interface和@implementation来处理类. @interface就好像暴 ...
- 上下文菜单项(contextMenu)----长按按钮弹出菜单项
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...