51nod 1851 俄罗斯方块(思维题)
分析:假设n>=m,m为1,2单独讨论下,否则可以用第二行第一个把所有黑块搞到2x2的格子里,不断用凸出来的那个角一列一列把黑的变白就行了。然后只要黑色有偶数块都可以构造出来。复杂度O(nm)
#include <iostream> #include <cstring> #include <cstdio>using namespace std; class Board{ public:char **a;int n, m;void init(int _n, int _m){n = _n, m = _m;a = new char*[n];for(int i = 0; i < n; i++)a[i] = new char[m];}Board(){}Board(int _n, int _m){init(_n, _m);}~Board(){for(int i = 0; i < n; i++)delete[] a[i];delete[] a;}void print(){for(int i = 0; i < n; i++){for(int j = 0; j < m; j++)cout<<a[i][j];cout<<endl;}} }; void inline change(char &a){a = '1' + '0' - a; } inline void changex(char **a, int n, int m, int x, int y){if(y == 0){change(a[x][y]);change(a[x-1][y]);change(a[x-1][y+1]);change(a[x-2][y+1]);}else{change(a[x][y]);change(a[x-1][y]);change(a[x-1][y-1]);change(a[x-2][y-1]);} } inline void changey(char **a, int n, int m, int x, int y){if(x == 0){change(a[x][y]);change(a[x][y-1]);change(a[x+1][y-1]);change(a[x+1][y-2]);}else{change(a[x][y]);change(a[x][y-1]);change(a[x-1][y-1]);change(a[x-1][y-2]);} } bool solve(char **a, int n, int m){if(n == 2 && m == 2){if(a[0][1] != a[0][0] || a[1][0] != a[0][0] || a[1][1] != a[0][0])return false;return true;}else if(n <= 2 && m <= 2){for(int i = 0; i < n; i++)for(int j = 0; j < m; j++)if(a[i][j] == '1')return false;return true;}else if(n == 1){while(m >= 4){if(a[0][m-1] == '1'){change(a[0][m-1]);change(a[0][m-2]);change(a[0][m-3]);change(a[0][m-4]);}m--;}if(a[0][0] == '1' || a[0][1] == '1' || a[0][2] == '1')return false;else return true;}else if(m == 1){while(n >= 4){if(a[n-1][0] == '1'){change(a[n-1][0]);change(a[n-2][0]);change(a[n-3][0]);change(a[n-4][0]);}n--;}if(a[0][0] == '1' || a[1][0] == '1' || a[2][0] == '1')return false;else return true;}while(m >= 3){for(int i = 0; i < n; i++)if(a[i][m-1] == '1')changey(a, n, m, i, m-1);m--;}while(n >= 3){for(int i = 0; i < m; i++)if(a[n-1][i] == '1')changex(a, n, m, n-1, i);n--;}int cnt = 0;for(int i = 0; i < n; i++)for(int j = 0; j < m; j++)cnt += a[i][j]=='1'?1:0;if(cnt % 2 == 0)return true;return false; } int main() { // freopen("in", "r", stdin);int t;cin>>t;while(t--){int n, m;scanf("%d%d\n", &n, &m);Board *a = new Board(n, m);int i = 0, j = 0;while(i < n){a->a[i][j] = getchar();j++;if(j == m){getchar();i++;j = 0;}}if(solve(a->a, a->n, a->m))cout<<"Yes"<<endl;else cout<<"No"<<endl;delete a;}return 0; }
转载于:https://www.cnblogs.com/7391-KID/p/10610710.html
51nod 1851 俄罗斯方块(思维题)相关推荐
- 51 nod 1851 俄罗斯方块
1851 俄罗斯方块 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 玩过俄罗斯方块?那你知道俄罗斯方块共有七种吧(其实只有五种) 给一个黑白图,每次能将某 ...
- little w and Soda(思维题)
链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- ZOJ 3829 贪心 思维题
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...
- yoyo思维题(困难) 组合数学
问题 B: yoyo思维题(困难) 时间限制: 1 Sec 内存限制: 256 MB 提交: 11 解决: 3 [提交][状态][讨论版][命题人:qianyouyou][Edit] [TestD ...
- 1884: 三个家庭(思维题)
1884: 三个家庭 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 244 Solved: 81 [Submit][Status][Web Board] ...
- 思维题 UVA 10881 Piotr's Ants
题目传送门 1 /* 2 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 3 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 4 关键2:蚂蚁的相对位置 ...
- CF--思维练习-- CodeForces - 215C - Crosses(思维题)
ACM思维题训练集合 There is a board with a grid consisting of n rows and m columns, the rows are numbered fr ...
- ACM思维题训练 Section A
题目地址: 选题为入门的Codeforce div2/div1的C题和D题. 题解: A:CF思维联系–CodeForces -214C (拓扑排序+思维+贪心) B:CF–思维练习-- CodeFo ...
- CodeForces - 1102A(思维题)
https://vjudge.net/problem/2135388/origin Describe You are given an integer sequence 1,2,-,n. You ha ...
最新文章
- 数据草拟:使您的团队热爱数据的研讨会
- android ble 实现自动连接,Android:自动重新连接BLE设备
- python中调用是什么意思_在Python中调用函数的含义?
- System.load(String filename)和System.loadLibrary(String libname)的区别
- linux交叉编译出现的问题,,Ubuntu 14.10下安装GCC交叉编译器遇到问题及解决方法
- 配置登入是显示服务器信息
- zencart后台修改首页meta_title、meta_keywords、meta_description
- JavaScript函数的两种声明方式(4)
- 笔记︱金融风险之欺诈分类以及银行防控体系简述
- make menuconfig显示错误“Your display is too small to run Menuconfig!”
- 学习HTML 笔记A3 :HTML标题、段落、文本格式化
- 无刷直流电动机的工作原理
- 7-11 最长的单词
- html页面设计参考文献英文,网页设计网站参考文献(国外英文资料).doc
- k8s安装dashboard及账号密码登陆
- Pycharm踩坑(一) FileNotFoundError: [Errno 2] No such file or directory: ‘../data/users.txt‘ 目录结构
- 统一依赖管理Composing builds
- 当科技成为潮流,下一个新十年的未来应该如何畅想?
- 在mysql中删除数据后,添加数据,id值依然从删除的位置开始增加,问题详解。
- 5W1H分析法 什么是5W1H分析法?