高斯消元,可以直接消的

 #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. Beta冲刺-用户测试报告

    一.项目概述 1.1项目名称 高校学生征信系统 1.2项目简介 此项目基于SSH框架,力图为学生提供征信服务和信用相关的借款和申请活动.其中以信用统计和管理为主,信用使用为辅,构建出一个集信用收集和使 ...

  2. 【iOS】单元测试

    iOS单元测试(作用及入门提升) 字数1704 阅读16369 评论26 喜欢247 由于只是一些简单实用的东西,学学还是挺不错的.其实单元测试用的好,开发起来也会快很多.单元测试对于我目前来说,就是 ...

  3. win7 Anaconda 安装 scrapy模块

    之前用了很多方法,都安装不成功,今天终于成功了..说下方法.. anaconda的清华镜像:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ ...

  4. 库函数strstr的实现

    没什么说的,常规思路: 函数原型:const char* StrStr(const char *str1, const char *str2) 方法一: str1:源字符串: str2:需要查找的目的 ...

  5. bzoj千题计划177:bzoj1858: [Scoi2010]序列操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...

  6. ArrayList、Vector、LinkedList、HashMap、HashTable的存储性能和特性

    ArrayList和Vector都是使用数组方式存储数据,次数组元素大于实际存储的数据以便添加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数 ...

  7. python 字符串的方法

    capitalize() 把字符串的第一个字符改为大写 casefold() 把整个字符串的所有字符改为小写 center(width) 将字符串居中,并使用空格填充至长度 width 的新字符串 c ...

  8. python3.6执行pip3时 Unable to create process using '"'

    问题需求 由于在windows操作系统中已经安装了python2.7,要在安装python3的时候 将python3.6安装在C:\Python36目录下 然后进入C:\Python36目录下执行pi ...

  9. python API验证

    API验证 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 API验证:     a. 发令牌: 静态         PS: 隐患 key ...

  10. python基础——内置函数

    python基础--内置函数  一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...