[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个元素(如果 ...
随机推荐
- Android Studio build dex jar
Gradle配置 Build配置文件gradle.build中添加如下task task clearJar(type: Delete) { delete 'build/outputs/mylib.ja ...
- win7下的ipython没有的问题
在笔记本上安装python2.7后,执行python是可以的,但是ipython却不行. 一.问题排查 在网上搜索了看到python与ipython的区别: 例如:ipython有tab补全功能,然后 ...
- 程序设计入门——C语言 第2周编程练习 信号报告(5分)
2 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength) 信号强度即大小. 其中R位于报告第一位,共分5 ...
- 【UFLDL】Exercise: Convolutional Neural Network
这个exercise需要完成cnn中的forward pass,cost,error和gradient的计算.需要弄清楚每一层的以上四个步骤的原理,并且要充分利用matlab的矩阵运算.大概把过程总结 ...
- python内置函数 3
int( [x[, radix]])转换为字符串或数字为纯整数.如果参数是一个字符串,它必须包含一个可能有符号的十进制数作为一个 Python 整 数,可能嵌入空格.以 radix 参数给出的基数为基 ...
- Copy List with Random Pointer [LeetCode]
A linked list is given such that each node contains an additional random pointer which could point t ...
- python中lambda函数
1.lambda函数使用如下: lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右侧的是返回值 >>> g=lambda x,y:x*y>>> g(4 ...
- jQuery水平下拉菜单实现
<!DOCTYPE html> <html> <head> <title>jQuery水平下拉菜单实现</title> ...
- google应用商店的解决
{ "enabled_plugins": [ "SimpleReloadPlugin", "SimpleRefresh" ] } git c ...
- oracle with as
http://blog.csdn.net/a9529lty/article/details/4923957/