题目大意:给出一个黑白图,你可以选定一个俄罗斯方块的区域,黑白翻转,问能否变成白图

比较trick的题目,

首先可以想到,奇数个1肯定是无解的,所以考虑偶数个1

可以先讨论n是2的情况

当n为2时,其实除了m也等于2时需要特判外,都是可行的(因为你可以不断地往右侧推进,最后变成4个1)

所以n为偶数也是可行的

n为奇数时,可以把奇数行的1变到偶数行,所以也是可行的

最后就讨论n是1的情况,这个贪心往右侧走即可

(以及掌握了读入的优化技巧)

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int T, n, m;
int str[];
int read01() {
char c = getchar();
for(; c != '' && c != ''; c = getchar());
return c - '';
}
int main() {
cin>>T;
while(T--) {
scanf("%d %d", &n, &m);
int ans = ;
if(n == || m == ) {
n = (n > m ? n : m);
for(int i = ; i < n; i++)
str[i] = read01();
for(int i = ; i < n-; i++)
if(str[i]) {
str[i] ^= ;
str[i+] ^= ;
str[i+] ^= ;
str[i+] ^= ;
}
int f = ;
for(int i = ; i < n; i++) if(str[i]) f = ;
if(f) cout<<"No"<<endl;
else cout<<"Yes"<<endl;
continue;
}
for(int i = ; i < n; i++)
for(int j = ; j < m; j++)
ans += read01();
if(ans&) cout<<"No"<<endl;
else {
if(n == && m == ) {
if(ans == || ans == ) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
continue;
}
cout<<"Yes"<<endl;
}
}
}

最新文章

  1. sqlServer去除字符串空格
  2. ubuntu与win10互换硬盘
  3. C++中的类访问控制
  4. Ubuntu命令行下安装,卸载软件包的过程[转]
  5. windows新的数据类型
  6. java文件的读写操作
  7. .NET面试题系列[18] - 多线程同步(1)
  8. UVA 1508 - Equipment dp状态压缩
  9. MongoDB的数据备份与恢复
  10. golang包管理解决之道——go modules初探
  11. win10 uwp 商业游戏 1.2.1
  12. Treap仿set 模板
  13. Java 关键字final的一小结
  14. linux4.10.8 内核移植(三)---裁剪内核
  15. 【经验分享】我经历的几门MOOC
  16. 大津法---OTSU算法
  17. UVAL 3942 Remember the Word(递推+Trie)
  18. RedHat7.3创建本地yum源
  19. shell脚本监控Linux系统的登录情况
  20. win下php5.4安装ffmpeg-php扩展

热门文章

  1. javascript--自定义弹出登陆窗口(弹出窗)
  2. 新手学习ARM,对片内ram、SDRAM、NOR FLASH和NAND FLASH启动这几个概念的理解
  3. C语言实例解析精粹学习笔记——30
  4. PAT-A1002
  5. Windows Store App下代码加载page resource和resw文件里的string
  6. python中矢量化字符串方法
  7. [bzoj5158][Tjoi2014]Alice and Bob
  8. iOS开发中常见的一些异常
  9. BeyondCompare3 提示许可证密钥已被撤销解决方法
  10. Java泛型的基本介绍与使用