HDU-5319 Painter
2015-07-29 14:16
447 查看
#include <iostream> #include <cstring> using namespace std; const int maxn = 60; char rec[maxn][maxn]; int dict[maxn][maxn]; int t, n, m, cnt; //int k = 0; //inline void print() //{ // cout << ++k << endl; // for(int i = 0; i < n; i++) // { // for(int j = 0; j < m; j++) // cout << dict[i][j] << " "; // cout << endl; // } // cout << endl; //} int main(void) { bool z = false; int l, r; cin >> t; while(t--) { cin >> n; cnt = 0; for(int i = 0; i < n; i++) cin >> rec[i]; m = strlen(rec[0]); memset(dict,0,sizeof(dict)); for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { if((rec[i][j] == 'R' || rec[i][j] == 'G') && dict[i][j] == 0) { dict[i][j] = 1; l = i + 1, r = j + 1; while(l < n && r < m && dict[l][r] == 0 && (rec[l][r] == 'R' || rec[l][r] == 'G')) { dict[l][r] = 1; l++,r++; } z = true; } if(z) { cnt++; z = false; //print(); } } } memset(dict,0,sizeof(dict)); for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { if((rec[i][j] == 'B' || rec[i][j] == 'G') && dict[i][j] == 0) { dict[i][j] = 1; l = i + 1, r = j - 1; while(l < n && r >= 0 && dict[l][r] == 0 && (rec[l][r] == 'B' || rec[l][r] == 'G')) { dict[l][r] = 1; l++,r--; } z = true; } if(z) { cnt++; z = false; //print(); } } } cout << cnt << endl; } }
题意:给一副画,上面分别有三种颜色,红(R)蓝(B)绿(G)(红蓝基础色,绿是红蓝相交后产生。(槽点:红+蓝 = 绿?)),红色只能↖↘画,蓝色只能↙↗画。问最少几笔就能产生这幅画。
题解:从昨天下午2点到今天下午2点。这耗时也是令我心累。总是有点BUG。到最后直接重写反而过。总之是干上了,把南墙撞了才继续前进。(第一次写这道题装比用map做标记,结果map并不是对应数组每个元素对应变化....)
输入t(杭电固有格式),之后输入n(表示输入行数)(只是行数,列数并不确定,也就是题目第一个注意点 不一定是正方形)。(我就不吐槽阿信叠跟我说一定是正方形了。。)第二个注意点就是一笔下去可以中间停下,不一定划到底。如果去掉注释,便可以反映整个画出这幅画的过程。dict数组是为了做标记。就是利用了两个循环,第一个循环针对R和G,只↘这方向画(l++,r++),第二个循环针对B和G,只↙这方向画(l++,r--).(因为是从上到下搜索 所以只要朝这两个方向就能遍历。)。举例第一次循环,先把二维数组全部清零,之后搜索,遇到R和G并且标记值dict==0(说明这个元素之前没有划到过)给其打上标记
(此时cnt++),之后在此循环内部循环,i++ r++遍历对角线(满足没有超过边界 没有被标记过 并且是G或者R)。
相关文章推荐
- 关于RAID
- 2015 Multi-University Training Contest 3 RGCDQ
- Painter(模拟)
- 在服务 ObtainData 实现的协定列表中找不到协定名称 "IMetadataExchange"。将 ServiceMetadataBehavior 添加到配置文件或直接添加到 ServiceHost,以启用对该协定的支持。
- 有关Error - RtlWerpReportException failed with status code :-1073741823.的解决方法
- HDU 1021 Fibonacci Again
- HDU 5319 Painter
- gensim安装http://blog.csdn.net/helihongzhizhuo/article/details/47038575
- Failed to push selection: Read-only file system的解决方法
- zz 通过INFORMATION_SCHEMA.INNODB_TRX、INNODB_LOCKS、INNODB_LOCK_WAITS 三个表获取事务与锁的信息
- 2015 Multi-University Training 3 多校集训 第三场 部分题解及反思
- [模拟] 多校联合第三场 painter HDU 5319
- 2015 Multi-University Training Contest 3 1004
- hdu5319(2015多校3)--Painter(暴力,,,)
- async & await 的前世今生(Updated)
- hdu 5319 Painter 2015 Multi-University Training Contest 3
- SVN svnserve.conf: Option expected 的解决方法 以及 Authorization failed 的解决方法
- HDU-1867-A + B for you again
- 关于出现( linker command failed with exit code 1)错误总结
- 2015 Multi-University Training Contest 3 1002 RGCDQ(hdu5317)