高斯消元,可以直接消的

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define MAXN 45*45
#define For(i,x,y) for(register int i=x;i<=y;i++)
using namespace std;
int X,Y;
int a[MAXN][MAXN];
int c(int x,int y){return (x-)*Y+y;}
int d[]={,-,,,};
void init(){
scanf("%d%d",&X,&Y);
int x,y;
For(i,,X){
For(j,,Y){
a[c(i,j)][c(i,j)]=;
For(k,,){
x=i+d[k],y=j+d[k+];
if(<=x&&x<=X&&<=y&&y<=Y){
a[c(i,j)][c(x,y)]=;
}
}
a[c(i,j)][c(X,Y)+]=;
}
}
}
int ans[][];
void guass(int m,int n){
int line=;
For(k,,m){
int i=line;
while(i<=m&&!a[i][k])i++;
if(i>m){
for(i=;i<line;i++){
if(a[i][k])a[i][n]^=,a[i][k]=;
}
continue;
}
if(i!=line)swap(a[i],a[line]);
for(i=;i<=m;i++){
if(i==line)continue;
if(a[i][k]){
For(j,k,n){
a[i][j]^=a[line][j];
}
}
}
line++;
}
line=;
For(i,,X){
For(j,,Y){
if(a[line][c(i,j)]){
ans[i][j]=a[line][n];
line++;
}
else{
ans[i][j]=;
}
}
}
}
void solve(){
guass(c(X,Y),c(X,Y)+);
For(i,,X){
For(j,,Y-){
printf("%d ",ans[i][j]);
}
printf("%d\n",ans[i][Y]);
}
}
int main()
{
// freopen("data.in","r",stdin);
init();
solve();
return ;
}

注意到第一行会决定第二行,第二行会决定第三行,然后处理最后一行,让它符合即可,这样方程数目少了一个平方

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define MAXN 45
#define For(i,x,y) for(register int i=x;i<=y;i++)
#define ll long long
using namespace std;
int X,Y;
ll t[MAXN][MAXN];
int a[MAXN<<][MAXN];
int ans[MAXN][MAXN];
void guass(int n,int m){
int line=;
For(k,,n){
int i=line;
while(i<=n&&!a[i][k])i++;
if(i>n){
for(i=line-;i>=;i--){
if(a[i][k])a[i][m]^=,a[i][k]=;
}
continue;
}
if(i!=line)swap(a[i],a[line]);
for(i=;i<=n;i++){
if(i==line)continue;
if(a[i][k]){
For(j,k,m){
a[i][j]^=a[line][j];
}
}
}
line++;
}
line=;
For(k,,n){
if(a[line][k]){
ans[][k]=a[line][m];
line++;
}
else{
ans[][k]=;
}
}
}
void init(){
scanf("%d%d",&X,&Y);
For(i,,Y)t[][i]=(1LL<<(i-));
For(i,,X+){
For(j,,Y){
t[i][j]=t[i-][j-]^t[i-][j]^t[i-][j+]^t[i-][j];
}
}
ll p;int k;
For(j,,Y){
for(p=t[X+][j],k=;p;p>>=,k++){
if(p&){
a[j][k]=;
}
}
}
}
void solve(){
guass(Y,Y+);
// for(int i=1;i<=Y;i++){
// for(int j=1;j<=Y+1;j++){
// printf("%d ",a[i][j]);
// }
// printf("\n");
// }
For(i,,X){
For(j,,Y){
ans[i][j]=ans[i-][j-]^ans[i-][j]^ans[i-][j+]^ans[i-][j];
}
}
For(i,,X){
For(j,,Y-){
printf("%d ",ans[i][j]);
}
printf("%d\n",ans[i][Y]);
}
}
int main()
{
// freopen("data.in","r",stdin);
init();
solve();
return ;
}

洛谷P3164 [CQOI2014]和谐矩阵的更多相关文章

  1. P3164 [CQOI2014]和谐矩阵

    P3164 [CQOI2014]和谐矩阵 乱写能AC,暴力踩标程(雾 第一眼 诶这题能暴力枚举2333!!! 第二眼 诶这题能高斯消元!那只需要把每个位置的数给设出来就能够列方程了!然后就可以\(O( ...

  2. P3164 [CQOI2014]和谐矩阵(高斯消元 + bitset)

    题意:构造一个$n*m$矩阵 使得每个元素和上下左右的xor值=0 题解:设第一行的每个元素值为未知数 可以依次得到每一行的值 然后把最后一行由题意条件 得到$m$个方程 高斯消元解一下 bitset ...

  3. BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )

    偶数个相邻, 以n*m个点为变量, 建立异或方程组然后高斯消元... O((n*m)^3)复杂度看起来好像有点大...但是压一下位的话就是O((n*m)^3 / 64), 常数小, 实际也跑得很快. ...

  4. 【高斯消元】BZOJ3503 [Cqoi2014]和谐矩阵

    3503: [Cqoi2014]和谐矩阵 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1197  Solved: ...

  5. BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元

    BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元 题意: 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本身,及他上下左右的4个元素(如果 ...

  6. bzoj千题计划105:bzoj3503: [Cqoi2014]和谐矩阵(高斯消元法解异或方程组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3503 b[i][j] 表示i对j是否有影响 高斯消元解异或方程组 bitset优化 #include ...

  7. 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个 ...

  8. [洛谷P1527] [国家集训队]矩阵乘法

    洛谷题目链接:[国家集训队]矩阵乘法 题目背景 原 <补丁VS错误>请前往P2761 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入 ...

  9. 【题解】洛谷P3166 [CQOI2014] 数三角形(组合+枚举)

    洛谷P3166:https://www.luogu.org/problemnew/show/P3166 思路 用组合数求出所有的3个点组合(包含不合法的) 把横竖的3个点共线的去掉 把斜的3个点共线的 ...

随机推荐

  1. 【Alpha 阶段】后期测试及补充(第十一、十二周)

    [Alpha 阶段]动态成果展示 修复了一些bug后,关于游戏的一些动态图展示如下: 终极版需求规格说明书和代码规范 经过一些细微的图片和格式的调整,完成了本学期的最终版本: [markdown版说明 ...

  2. 201621123031 《Java程序设计》第4周学习总结

    Week04-面向对象设计与继承 1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键词:继承.覆盖.多态.抽象 1.2 尝试使用思维导图将这些关键词组织起来. 1.3 可选: ...

  3. I/O多路转接之poll 函数

    poll 一.poll()函数: 这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数,自认为poll和select大同小异,下面是这个函数的声明: #include < ...

  4. splinter web测试框架

    1.安装谷歌浏览器驱动(windows把驱动解压放在Python.exe同级目录即可) http://chromedriver.storage.googleapis.com/index.html 注意 ...

  5. thinkphp框架调用类不存在的方法

    thinkphp框架调用类不存在的方法调用类不存在的方法,不会报错,但是也不会执行,这是根据tp框架里面的一个魔术方法,框架里面一共才十几个魔术方法

  6. 用python实现与小米网关通讯

    python 与小米网关通讯的三块内容: 以下内容的理解需要配合<绿米网关局域网通讯协议>使用 1.监听网关发出的组播信息:(有网关及连接设备的生命信号,事件信息) 2.读取需要获得的信息 ...

  7. Linux系统把/home重新挂载到其他硬盘或分区

    一开始没有做好规划,导致/home空间不足,再加上分区表不是GPT,导致无法扩展超过2T,因此需要重新划分一块更大的硬盘给/home. 1.把新挂载的4T硬盘进行分区和格式化 2.创建目录 sudo ...

  8. JMM简介

    JMM:Java Memory Model(Java内存模型),围绕着在并发过程中如何处理可见性.原子性.有序性这三个特性而建立的模型. 可见性:JMM提供了volatile变量定义.final.sy ...

  9. 图数据库orientDB(1-1)SQL基本操作

    SQL基本操作 1.新增VerTex CREATE VERTEX V SET name="user01",sex="M",age="25"; ...

  10. 大数据学习总结(6)what is our foucus

    1.搜索业务 2.画像业务 3.关系图谱 借助es构建搜索.画像和关系图谱