P3164 [CQOI2014]和谐矩阵
2024-08-29 23:57:10
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;
}
最新文章
- Laravel学习笔记(一)安装配置开发环境
- find参数exec、管道符|、xargs的区别
- jQuery动态五星评分
- IE8对css文件的限制
- SendMessage的返回值,就是由相应的响应消息函数的返回值(解释的简洁明了)
- JavaScript之apply()和call()的区别
- CSDN Androidclient生产 导航帖
- 完美解决ie8以下不兼容h5的方法
- 移植 DeepinQQ 到 Fedora 中
- C语言程序设计第五次作业——循环结构
- TypeScript: Week Reflection
- 【翻译】Ext JS最新技巧——2016-3-4
- PopupMenuDemo【popupMenu的简单使用】
- PlantUML + Chrome 联合使用
- 安卓Android基础四天
- Python scrapy爬取带验证码的列表数据
- SprngMVC源码学习
- JAVA创建子进程并处理waitFor() 阻塞问题
- 关于此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。
- nginx配置 解决ajax请求跨域问题
热门文章
- 浅析NSTextContainer
- PHP防SQL注入和XSS攻击
- 【matlab】 幂法 求解最大特征值
- Linux----CentOS-7搭建免流服务器(iOS 端)
- [转]HBase高可用性的新阶段
- 智能指针shared_ptr新特性shared_from_this及weak_ptr
- P4053 [JSOI2007]建筑抢修
- SQLServer2008导出表数据为SQL脚本
- Day14 集合(一)
- ASP.NET Core读取appsettings.json配置文件信息