博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bzoj3503--Cqoi2014和谐矩阵
阅读量:4970 次
发布时间:2019-06-12

本文共 1177 字,大约阅读时间需要 3 分钟。

原本想每个点建个五元异或方程组高斯消元解的,发现时间有点紧,就去压位卡常,结果调试的时候把自己挂在键盘上了。- -|

正解是从第一排推出第m+1排的异或表达式,然后因为m+1排的数全为0,转回来解这个异或方程组。

实现上我是消的对角线,消成上三角可能会快。出于习惯,我是把n,m互换了的。

代码:

#include
#define INF 1000000000#define LNF 100000000000000ll#define eps 1e-9#define LL long long#define MOD 1000000007inline int _max(int a,int b) {
return a>b?a:b;}inline double _fabs(double a) {
return a>0?a:-a;}using namespace std;#define MAXN 45#define MAXM 1605LL xr[MAXN][MAXN],gs[MAXN];int m,n,num[MAXN],mp[MAXN][MAXN];void Gauss() { int p,now=1; for(int i=1;i<=m;i++) { p=now; while(p<=m&&!(gs[p]>>i&1)) p++; if(p>m) continue; swap(gs[p],gs[i]);swap(num[p],num[i]); for(int j=1;j<=m;j++) if(i!=j&&gs[j]>>i&1) gs[j]^=gs[i]; now++; } p=m; for(int i=m;i;i--) { if(!(gs[i]>>i&1)) {mp[1][i]=1;continue;} for(int j=i+1;j<=m;j++) if(gs[i]>>j&1) mp[1][i]^=mp[1][j]; } for(int i=2;i<=n;i++) for(int j=1;j<=m;j++) mp[i][j]=mp[i-1][j]^mp[i-1][j-1]^mp[i-1][j+1]^mp[i-2][j];}int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) xr[1][i]=1ll<

 

转载于:https://www.cnblogs.com/ihopenot/p/5959057.html

你可能感兴趣的文章
Scrapy爬虫框架补充内容一(Linux环境)【Scrapy爬虫框架结构及工作原理】
查看>>
【Coding】Eclipse使用技巧
查看>>
研磨设计模式之——代理模式(一)
查看>>
Java学习之路(十二):IO流
查看>>
java 编程基础
查看>>
策略模式——HeadFirst 设计模式学习笔记
查看>>
web页面兼容性测试之browsershots工具使用
查看>>
java常用设计模式十二:命令模式
查看>>
SQL NOTE-VARIABLE
查看>>
电商环境下客户关系管理的特点及应用
查看>>
前台登录验证
查看>>
大数据计算新贵Spark在腾讯雅虎优酷成功应用解析
查看>>
CoreGraphics QuartzCore CGContextTranslateCTM 说明
查看>>
基本推荐算法站点
查看>>
创建与删除索引
查看>>
log4net使用具体解释
查看>>
Perl多进程
查看>>
乐酷工作室孙志伟:Testin云測试有广度有深度 省钱省力值得信赖
查看>>
CodeForces 22C System Administrator
查看>>
团队博客8
查看>>