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;
}

最新文章

  1. Laravel学习笔记(一)安装配置开发环境
  2. find参数exec、管道符|、xargs的区别
  3. jQuery动态五星评分
  4. IE8对css文件的限制
  5. SendMessage的返回值,就是由相应的响应消息函数的返回值(解释的简洁明了)
  6. JavaScript之apply()和call()的区别
  7. CSDN Androidclient生产 导航帖
  8. 完美解决ie8以下不兼容h5的方法
  9. 移植 DeepinQQ 到 Fedora 中
  10. C语言程序设计第五次作业——循环结构
  11. TypeScript: Week Reflection
  12. 【翻译】Ext JS最新技巧——2016-3-4
  13. PopupMenuDemo【popupMenu的简单使用】
  14. PlantUML + Chrome 联合使用
  15. 安卓Android基础四天
  16. Python scrapy爬取带验证码的列表数据
  17. SprngMVC源码学习
  18. JAVA创建子进程并处理waitFor() 阻塞问题
  19. 关于此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。
  20. nginx配置 解决ajax请求跨域问题

热门文章

  1. 浅析NSTextContainer
  2. PHP防SQL注入和XSS攻击
  3. 【matlab】 幂法 求解最大特征值
  4. Linux----CentOS-7搭建免流服务器(iOS 端)
  5. [转]HBase高可用性的新阶段
  6. 智能指针shared_ptr新特性shared_from_this及weak_ptr
  7. P4053 [JSOI2007]建筑抢修
  8. SQLServer2008导出表数据为SQL脚本
  9. Day14 集合(一)
  10. ASP.NET Core读取appsettings.json配置文件信息