原题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3517

翻硬币

Description

有一个n行n列的棋盘,每个格子上都有一个硬币,且n为偶数。每个硬币要么是正面朝上,要么是反面朝上。每次操作你可以选定一个格子(x,y),然后将第x行和第y列的所有硬币都翻面。求将所有硬币都变成同一个面最少需要的操作数。

Input

第一行包含一个正整数n。
接下来n行,每行包含一个长度为n的01字符串,表示棋盘上硬币的状态。

Output

仅包含一行,为最少需要的操作数。

Sample Input

4
0101
1000
0010
0101

Sample Output

2

HINT
【样例说明】

对(2,3)和(3,1)进行操作,最后全变成1。

【数据规模】

对于100%的数据,n ≤ 1,000。

题解

最暴力的思路当然是列n2n2n^2个异或方程组,然后高斯消元去接一个n2n2n^2个方程,nnn个未知数的方程组,大概是O(n4)" role="presentation" style="position: relative;">O(n4)O(n4)O(n^4)的。。。

我们不如拿个2×22×22\times 2的矩阵玩玩,设aaa是否翻转为a" role="presentation" style="position: relative;">aaa取值000或1" role="presentation" style="position: relative;">111,aaa的目标状态为a′" role="presentation" style="position: relative;">a′a′a',b,c,db,c,db,c,d以此类推:

那么我们可以列出四个方程:

⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪a xor b xor c=a′a xor b xor d=b′a xor d xor c=c′d xor b xor c=d′(1)(2)(3)(4){axorbxorc=a′(1)axorbxord=b′(2)axordxorc=c′(3)dxorbxorc=d′(4)

\left\{ \begin{array}\\ a\ xor\ b\ xor\ c=a'&&(1)\\ a\ xor\ b\ xor\ d=b'&&(2)\\ a\ xor\ d\ xor\ c=c'&&(3)\\ d\ xor\ b\ xor\ c=d'&&(4) \end{array}\right.

貌似这些式子有点奇妙??

我们把(1)(2)(3)(1)(2)(3)(1)(2)(3)式异或起来:

a=a′ xor b′ xor c′a=a′xorb′xorc′

a=a'\ xor\ b'\ xor\ c'

震惊,其他未知数都被消掉了!!!其他的式子似乎也是如此,好像我们只需要将那某个点所在的一行一列的数全部异或起来,就能知道这个点是否需要反转。

推广一下:因为nnn是偶数,所以一定可以通过将2n−1" role="presentation" style="position: relative;">2n−12n−12n-1个方程异或起来得到上面的那种形状。

事情变得简单起来。

代码
#include<bits/stdc++.h>
#define val (sq[i][j]-'0')
using namespace std;
const int M=1e3+5;
int n;
bool x[M],y[M];
char sq[M][M];
void in()
{scanf("%d",&n);for(int i=1;i<=n;++i){scanf("%s",sq[i]+1);for(int j=1;j<=n;++j)x[i]^=val,y[j]^=val;}
}
void ac()
{int ans=0;for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)ans+=x[i]^y[j]^val^1;printf("%d",min(n*n-ans,ans));
}
int main()
{in();ac();return 0;
}

BZOJ3517 翻硬币相关推荐

  1. 浅谈 翻硬币游戏【Nim博弈】

    ACM博客_kuangbin 博弈-翻硬币游戏 hihoCoder 1172 : 博弈游戏·Nim游戏·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Alice和B ...

  2. 试题 历届试题 翻硬币(贪心)

    试题 历届试题 翻硬币 资源限制 时间限制:1.0s 内存限制:256.0MB Work hard,Play harder. 问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排 ...

  3. 蓝桥杯 - 翻硬币(贪心)

    小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo        ...

  4. 【DP】翻硬币(jzoj 3921)

    翻硬币 jzoj 3921 题目大意: 给你一个长度为nnn的当前01串和目标01串,现在你要做mmm此操作,每次操作你要使kkk个不同的位取反,现在问你有多少种方法可以使当前01串变为目标01串 输 ...

  5. 牛客14355 翻硬币

    链接:https://ac.nowcoder.com/acm/problem/14355 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  6. 蓝桥杯历届试题----矩阵翻硬币

    矩阵翻硬币 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵.随后,小明对每一个硬币分别进行一次 Q 操作.对第x行第y列的硬币进行 Q 操作的定义:将所有第 i*x 行,第 j*y 列的硬币进 ...

  7. 蓝桥杯练习系统历届试题 翻硬币

    问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如 ...

  8. 蓝桥杯试题:矩阵翻硬币

    矩阵翻硬币 这是蓝桥杯的一道练习题,题目如下: 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行第y列的硬币进行 Q 操作的定义:将所 ...

  9. HDU-3537 Mock Turtles型翻硬币游戏

    题意:<=10^8不定个硬币,给你n<=100个正面朝上的硬币以及他们所在的位置,可任选1/2/3个硬币反转(不必连续),但要求翻的这1/2/3个硬币中的最右侧的一个是正面朝上的,问先手者 ...

  10. AcWing 1208. 翻硬币

    1208. 翻硬币 题意: 给定一个初始字符串(只含*和o字符) 给定一个目标字符串(只含*和o字符) 翻转初始字符串,每次会同时翻转其相邻的两个字符 求初始字符串翻转到目标字符串的最小翻转次数 输入 ...

最新文章

  1. Ehcache 缓存
  2. 图系列|7篇动态时空图网络学习必读的顶会论文
  3. python as_Python with as的用法
  4. 【itext学习之路】--4.给pdf增加文本水印和图片水印
  5. mac mysql-share_mac下安装mysql
  6. 获取oracle 里的表名与字段
  7. Redis实战(七)
  8. Google云端语音识别app
  9. 第二部分 python基础 day10\11\12 运算符与基本数据类型
  10. 苹果电脑修改hosts文件方法介绍!mac的hosts文件位置在哪?
  11. oracle 数据分列,如何使用Excel把有规律地txt文本数据分列
  12. android手势密码csdn,Android简易手势密码开源库
  13. 在腾讯云开通短信验证服务并完成群发消息测试
  14. android bugly 错误分析,Android使用bugly捕捉异常
  15. EduCoder-Hive表DDL操作(一、二)答案-路漫漫远俢兮
  16. 爬虫(七)通过Selenium爬取网易云音乐评论
  17. java易宝在线支付及PaymentUtil.java下载
  18. onnx-modifier使用
  19. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements的解决方法
  20. google AdSense广告不显示的原因

热门文章

  1. 使用Gotestwaf测试WAF检测能力
  2. 一台电脑安装多个Chrome
  3. sql语句的书写顺序和执行顺序(包括各种可能的指令)
  4. 让面试官赞扬的IO读取方法:大文件进行词频统计(单线程与多线程分别解决)利用Buffer流简单又快捷
  5. 拥塞控制,图文并茂(挺丰富,借鉴较多大佬的思想)
  6. 225.队列实现栈 (力扣leetcode) 博主可答疑该问题
  7. 20145231熊梓宏 《网络对抗》 实验6 信息搜集与漏洞扫描
  8. 单个H扩展到多个H时,机器学习的保证
  9. phonegap plugin.xml 示例
  10. Servlet接收JSP参数乱码问题解决办法