P3164 [CQOI2014]和谐矩阵
P3164 [CQOI2014]和谐矩阵
乱写能AC,暴力踩标程(雾
第一眼
诶这题能暴力枚举2333!!!
第二眼
诶这题能高斯消元!那只需要把每个位置的数给设出来就能够列方程了!然后就可以\(O(1600^3)\)跑了!
第三眼
只需要对每一行每一列有奇数还是偶数个1列方程就行了!
然而我太菜了想不到这种方法
第三眼
这个方程好像系数都是0而且结果都是1!那么消的时候只需要下面方程减上面方程就行了!而且这是个模2意义下的方程!
emmm所以不需要减只需要异或?
所以可以用bitset存系数???
然后异或一下???
就可以\(O(1600^3/32)\)辗标算?
第四眼
诶好像可以卡常!显然1的数量很小,所以可以用bitset自带的findfirst和findnext可以寻找1的位置再减。。。
然后code出来就不开O2 8ms,开O2 0ms了
// It is made by XZZ
#include<cstdio>
#include<algorithm>
#include<bitset>
#define il inline
#define rg register
#define vd void
#define sta static
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
using namespace std;
bitset<1601>S[1601];
int p[1601];
int id[41][41];
int ans[1601];
int main(){
#ifdef xzz
freopen("3164.in","r",stdin);
freopen("3163.out","w",stdout);
#endif
int n=gi(),m=gi(),N=n*m;
for(rg int i=1;i<=n;++i)
for(rg int j=1;j<=m;++j)
id[i][j]=++id[0][0];
for(rg int i=1;i<=n;++i)
for(rg int j=1;j<=m;++j)
S[id[i][j]][id[i][j]]=1;
for(rg int i=1;i<=n;++i)
for(rg int j=1;j<m;++j)
S[id[i][j]][id[i][j+1]]=1;
for(rg int i=1;i<=n;++i)
for(rg int j=2;j<=m;++j)
S[id[i][j]][id[i][j-1]]=1;
for(rg int i=1;i<n;++i)
for(rg int j=1;j<=m;++j)
S[id[i][j]][id[i+1][j]]=1;
for(rg int i=2;i<=n;++i)
for(rg int j=1;j<=m;++j)
S[id[i][j]][id[i-1][j]]=1;
for(rg int i=1;i<=N;++i)p[i]=i;
for(rg int i=1;i<=N;++i){
for(rg int j=S[p[i]]._Find_first();j<i;j=S[p[i]]._Find_next(j))
if(S[p[j]][j])S[p[i]]^=S[p[j]];
else swap(p[i],p[j]);
}
for(rg int i=N;i;--i){
if(S[p[i]][i]==0){ans[i]=1;continue;}
for(rg int j=S[p[i]]._Find_next(i);j<=N;j=S[p[i]]._Find_next(j))
ans[i]^=ans[j];
}
for(rg int i=1;i<=n;++i){
for(rg int j=1;j<=m;++j)
printf("%d ",ans[id[i][j]]);
puts("");
}
return 0;
}
P3164 [CQOI2014]和谐矩阵的更多相关文章
- P3164 [CQOI2014]和谐矩阵(高斯消元 + bitset)
题意:构造一个$n*m$矩阵 使得每个元素和上下左右的xor值=0 题解:设第一行的每个元素值为未知数 可以依次得到每一行的值 然后把最后一行由题意条件 得到$m$个方程 高斯消元解一下 bitset ...
- 洛谷P3164 [CQOI2014]和谐矩阵
高斯消元,可以直接消的 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cst ...
- BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )
偶数个相邻, 以n*m个点为变量, 建立异或方程组然后高斯消元... O((n*m)^3)复杂度看起来好像有点大...但是压一下位的话就是O((n*m)^3 / 64), 常数小, 实际也跑得很快. ...
- 【高斯消元】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个元素(如果 ...
- 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]和谐矩阵(高斯消元,bitset)
Description 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本 身,及他上下左右的4个元素(如果存在). 给定矩阵的行数和列数,请计算并输 ...
- Luogu3164 CQOI2014 和谐矩阵 异或高斯消元
传送门 题意:给出$N,M$,试构造一个$N \times M$的非全$0$矩阵,其中所有格子都满足:它和它上下左右四个格子的权值之和为偶数.$N , M \leq 40$ 可以依据题目中的条件列出有 ...
随机推荐
- lambda 表达式的由来
相关技术点:函数指针.C#委托.匿名方法.lambda表达式 谈到lambda表达式,首先从委托讲起, 委托是持有一个或者多个方法的对象,这个特性有点像C中的函数指针,可以指向不同的方法,下面的例子是 ...
- Redis常用指令
1.使用指令存储数据 不同数据类型的使用 1.String > 在以上指令中我们使用set指令向redis存进了一个数据类型为string,名为str1,值为123456.(如果你要问为什么,那 ...
- ZT Shell 排序
Shell 排序 分类: 算法 C 2008-09-17 11:02 1898人阅读 评论(4) 收藏 举报 shell语言c 刚才在CSDN的C语言板块看到了有人说Shell排序的问题,所以一起学习 ...
- strip() 只去头尾的,不能去中间
# b = st.strip("|") # strip() 只去头尾的,不能去中间
- Javascript能做什么 不能做什么。
JavaScript可以做什么?用JavaScript可以做很多事情,使网页更具交互性,给站点的用户提供更好,更令人兴奋的体验. JavaScript使你可以创建活跃的用户界面,当用户在页面间导航时向 ...
- SOJ 4580 动态规划之01背包 (01背包)
Description Sidney想去Gandtom家玩.但Sidney家和Gandtom家之间是高低不平.坑坑洼洼的土路.所以他需要用他的背包装几袋稀的泥,在路上铺平一些干的土,使路变成平整的泥土 ...
- myFocus 焦点图/轮播插件
最近产品突然就来个需求,要加轮播图,而且是立马要上线,于是乎发现了一个超级简便好用的轮播图插件myFocus,而且myFocus提供很多种风格,可以选择. 这里是使用说明 http://www.chh ...
- 1026. [SCOI2009]windy数【数位DP】
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个windy数? I ...
- 【转】使用URL SCHEME启动天猫客户端并跳转到某个商品页面的方法
在项目中遇到了这样一个需求:让用户在手机应用中,点击一个天猫的商品链接(知道商品在PC浏览器里的地址),直接启动天猫的客户端并显示这个商品.以前曾经实现过类似的功能,不过那次是淘宝的商品,天猫和淘宝的 ...
- Java NIO(一)I/O模型概述
基本概念讲述 什么是同步? 同步就是:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行. 什么是异步? 异步就是 ...