高斯消元,可以直接消的

 #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. 关于C语言的第0次作业

    1.你认为大学的学习生活.同学关系.师生关系应该是怎样的?请一个个展开描述. 我认为的大学学习生活是充实的,丰富多彩的,与高中快节奏.繁忙的生活有所不同.在上了大学我们都成熟了很多,懂得了包容与忍让, ...

  2. 201621123025《Java程序设计》第1周学习总结

    201621123025<Jave程序设计>第一周学习总结 1.本章学习总结 对于java这门课程,如果不会编码那么会很难学会如何去使用它,而在大一的一二学期的专业课--C语言和数据结构我 ...

  3. continue和break的特殊用法。

    break在程序中一般来说的作用就是跳出当前循环,然后再据需执行循环外的语句.continue也是对当前循环来说直接进入到下一次循环.其实我们在程序中有时候循环体嵌套太多,进行到某一步是希望直接bre ...

  4. Network in Network

     论文要点: 用更有效的非线性函数逼近器(MLP,multilayer perceptron)代替 GLM 以增强局部模型的抽象能力.抽象能力指的模型中特征是对于同一概念的变体的不变形. 使用 gl ...

  5. java截取一个字符串正数或倒数某个特定字符前后的内容

    取出正数第二个“.”后面的内容 public class TestCode { public static void main(String[] args) { String str ="2 ...

  6. linux下git常用命令

    1 安装: sudo apt-get install git 2 创建一个版本库: 新建一个文件夹,进入这个目录之后 git init 3 创建一个版本: git add 文件名或目录 #表示将当前文 ...

  7. 翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

    4.4.7. The CONSTANT_Utf8_info Structure The CONSTANT_Utf8_info structure is used to represent consta ...

  8. [洛谷P1198/BZOJ1012][JSOI2008] 最大数 - 树状数组/线段树?

    其实已经学了树状数组和线段树,然而懒得做题,所以至今没写多少博客 Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数 ...

  9. POJ-1182 食物链---并查集(附模板)

    题目链接: https://vjudge.net/problem/POJ-1182 题目大意: 中文题,不多说. 思路: 给每个动物创建3个元素,i-A, i-B, i-C i-x表示i属于种类x,并 ...

  10. 使用LINGO来解决0/1背包算法问题

    1.问题说明 0/1背包问题:我们有n种物品,物品j的重量为wj,价格为pj.我们假定所有物品的重量和价格都是非负的.背包所能承受的最大重量为W.如果限定每种物品只能选择0个或1个,则问题称为0-1背 ...