Description

一个黑白网格,点一次会改变这个以及与其连通的其他方格的颜色,求最少点击次数使得所有全部变成黑色.

Sol

高斯消元解异或方程组.

先建立一个方程组.

\(x_i\) 表示这个点是否被用过.

因为第二次使用同一个点,这个点的贡献就被消除了,所以每个点只会被用 0/1 次.

\(a_{ij}\) 表示 \(j\) 点对 \(i\) 是否有影响,有影响为 1 否则为 0.

最后的一位表示最后的状态^最初的状态.

这样就列出来了 \(n*m\) 个方程组,一共 \(n*m\) 个未知数.

然后求解,就跟高斯消元一样,用异或的方式消掉就可以了.

Code

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; #define H(i,j) ((i-1)*m+j)
const int N = 35; int n,m;
int a[N][N]; void print(){
cout<<"----------------------------"<<endl;
for(int i=1;i<=30;i++){
for(int j=1;j<=31;j++) cout<<a[i][j];
cout<<endl;
}
} void init(){
n=5,m=6;
for(int i=1;i<=n;i++){
char s[N];memset(s,0,sizeof(s));
scanf("%s",s+1);
for(int j=1;j<=m;j++) a[H(i,j)][n*m+1]=1^(s[j]-'0');
// cout<<a[H(i,j)][n*m+1];
// cout<<endl<<s+1<<endl<<endl;
} for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) {
a[H(i,j)][H(i,j)]=1;
if(i+1<=n) a[H(i,j)][H(i+1,j)]=1;
if(i-1>=1) a[H(i,j)][H(i-1,j)]=1;
if(j+1<=m) a[H(i,j)][H(i,j+1)]=1;
if(j-1>=1) a[H(i,j)][H(i,j-1)]=1;
}
// print();
} void gauss(int n){
for(int i=1,r,j;i<n;i++){
for(r=j=i;j<n;j++) if(a[j][i]) { r=j;break; }
// cout<<i<<" "<<r<<endl;
if(r!=i) for(int k=i;k<=n;k++) swap(a[i][k],a[r][k]);
for(int k=i+1;k<n;k++) if(a[k][i]) {
for(j=i;j<=n;j++) a[k][j]^=a[i][j];
}
// print();
}
// print();
for(int i=n-1;i;i--){
for(int j=i+1;j<n;j++) a[i][n]^=a[j][n]*a[i][j];
} } void out(){
int ans=0;
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[H(i,j)][n*m+1]) ans++;
cout<<ans<<endl;
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[H(i,j)][n*m+1]) cout<<i<<" "<<j<<endl;
} int main(){
// freopen("in.in","r",stdin);
// freopen("log.out","w",stdout);
init();
gauss(31);
out(); return 0;
}

  

hihoCoder 1196 高斯消元·二的更多相关文章

  1. hihocoder 1196 高斯消元.二

    传送门 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中,小Hi和小Ho趁着便利店打折,买了一大堆零食.当他们结账后,看到便利店门口还有其他的活动. 店主:买了 ...

  2. hihoCoder#1196 : 高斯消元·二(开关灯问题)

    传送门 高斯消元解异或方程组 小Ho在游戏板上忙碌了30分钟,任然没有办法完成,于是他只好求助于小Hi. 小Ho:小Hi,这次又该怎么办呢? 小Hi:让我们来分析一下吧. 首先对于每一个格子的状态,可 ...

  3. hiho #1196 : 高斯消元·二

    #1196 : 高斯消元·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中,小Hi和小Ho趁着便利店打折,买了一大堆零食.当他们结账后,看到便利店门口还有其 ...

  4. hihocoder 第五十二周 高斯消元·二【高斯消元解异或方程 难点【模板】】

    题目地址:http://hihocoder.com/contest/hiho57/problem/1 输入 第1..5行:1个长度为6的字符串,表示该行的格子状态,1表示该格子是亮着的,0表示该格子是 ...

  5. HihoCoder 1195 高斯消元·一(高斯消元)

    题意 https://hihocoder.com/problemset/problem/1195 思路 高斯消元是解决高元方程的一种算法,复杂度 \(O(n^3)\) . 过程大致是: 构造一个未知数 ...

  6. hihoCoder 1195 高斯消元.一

    传送门 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:喂不得了啦,那边便利店的薯片半价了! 小Hi:啥?! 小Ho:那边的便利店在打折促销啊. 小Hi:走走走, ...

  7. hihoCoder #1195 高斯消元·一

    题意:便利店老板为了促销,推出了组合包的形式,将不同数量的各类商品打包成一个组合.比如2袋薯片,1听可乐的组合只要5元,而1袋薯片,2听可乐的组合只要4元.通过询问老板知道:一共有N种不同的商品和M种 ...

  8. [HIHO1196]高斯消元·二(高斯消元、枚举自由变元)

    题目链接:http://hihocoder.com/problemset/problem/1196 #include <bits/stdc++.h> using namespace std ...

  9. [hihoCoder] 高斯消元·一 [TPLY]

    高斯消元一 题目链接 : http://hihocoder.com/problemset/problem/1195?sid=1269842 很"好aoaoaoaoaoaoa"的高斯 ...

随机推荐

  1. quartz集群分布式(并发)部署解决方案-Spring

    项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻辑问题, ...

  2. 线程私有数据和pthread_once

    #include <stdio.h> #include <pthread.h> pthread_key_t key; pthread_once_t ponce = PTHREA ...

  3. XML中输入特殊符号

    XML中输入特殊符号 周银辉 特殊符号比如 ™, 要在xml中使用的话, 其实和html的转码是一样的, 参考下面这个表(使用十进制编码那一列) 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十 ...

  4. File API 读取文件小结

    简单地说,File API只规定怎样从硬盘上提取文件,然后交给在网页中运行的JavaScript代码. 与以往文件上传不一样,File API不是为了向服务器提交文件设计的. 关于File API不能 ...

  5. 给大家推荐一款高大上的代码高亮插件(sublime,github风格)——highlight.js

    经常在一些大神博客里面看到非常好看的高亮代码,有sublime风格,GitHub风格等等.毫无疑问,好的高亮代码插件可以不仅仅让你的博文显得更高大上,更重要的是舒适的阅读体验.经过我在网上的一番搜罗, ...

  6. JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(二)

    前言:上篇 JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一) 介绍了下knockout.js的一些基础用法,由于篇幅的关系,所以只能分成两篇,望见谅!昨天就 ...

  7. shell浅谈之九子shell与进程处理

    转自:http://blog.csdn.net/taiyang1987912/article/details/39529291 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] ...

  8. 别再抱怨了,国内这么多优秀的Android资源你都知道吗?

    因为一些大家都知道的原因,android很多官方出品的优秀开发资源在国内无法访问. 国内的同行们对此也做出了很多努力,有很多朋友通过各种手段把很多优秀的资源搬运到了国内,为国内android开发者提供 ...

  9. iOS特殊字符处理

    你提供的 URL 字符串 里面可能包含某些字符,比如‘$‘ ‘&’ ‘?’...等,这些字符在 URL 语法中是具有特殊语法含义的, 比如 URL :http://www.baidu.com/ ...

  10. 表格不被内容撑大,且超出的内容变为省略号(css)

    今天写代码,发现表格会被内容撑大,影响到了网页的整体布局. 百度了一解决方法,下面是代码和我的备注 table{table-layout: fixed;}        //固定表格 table td ...