HDU 5319 Painter (模拟)
2015-07-28 19:33
316 查看
题意:
一个画家画出一张,有3种颜色的笔,R、G、B。R看成'\',B看成'/',G看成这两种的重叠(即叉形)。给的是一个矩阵,矩阵中只有4种符号,除了3种颜色还有'.',代表没有涂色。问最小耗费多少笔即可画成这副图?
思路:
最小耗费就是斜着的可以一笔搞定,但是如果中间隔着'.'或者其他一种形状,则不能一笔,要变两笔。主要麻烦在矩阵不是正方形,而可能是长方形。其实只要按照其画法,从左上往右下方向画,逐个条斜线扫描即可。另一个方向'/'也是如此。
我看到模拟本来就不想敲,扫两遍矩阵,用了vector将他们每一条可能可以一笔画的线先装起来,再进行扫vector进行统计。哎~其实可以直接扫两矩阵就统计的,就是懒。
AC代码
一个画家画出一张,有3种颜色的笔,R、G、B。R看成'\',B看成'/',G看成这两种的重叠(即叉形)。给的是一个矩阵,矩阵中只有4种符号,除了3种颜色还有'.',代表没有涂色。问最小耗费多少笔即可画成这副图?
思路:
最小耗费就是斜着的可以一笔搞定,但是如果中间隔着'.'或者其他一种形状,则不能一笔,要变两笔。主要麻烦在矩阵不是正方形,而可能是长方形。其实只要按照其画法,从左上往右下方向画,逐个条斜线扫描即可。另一个方向'/'也是如此。
我看到模拟本来就不想敲,扫两遍矩阵,用了vector将他们每一条可能可以一笔画的线先装起来,再进行扫vector进行统计。哎~其实可以直接扫两矩阵就统计的,就是懒。
#include <bits/stdc++.h> using namespace std; const int N=250; char grid ; int n; vector<int> R , B ; int cal(int col) { int cnt=0; for(int i=1; i<=n; i++)//一个方向 { for(int j=1; j<=col; j++) { if(grid[i][j]=='R'||grid[i][j]=='G') { if(i>j) R[i-j].push_back(1); else if(i<j) R[j-i+100].push_back(1); else R[0].push_back(1); } else { if(i>j) R[i-j].push_back(0); else if(i<j) R[j-i+100].push_back(0); else R[0].push_back(0); } } } for(int i=0; i<N; i++) { int flag=0; for(int j=0; j<R[i].size(); j++) { if(!flag && R[i][j]==1) { cnt++; flag=1; } if(!R[i][j]) flag=0; } } for(int i=1; i<=n; i++)//另一方向 { for(int j=col,k=1; j>=1; j--,k++) { if(grid[i][j]=='B'||grid[i][j]=='G') { if(i>k) B[i-k].push_back(1); else if(i<k) B[k-i+100].push_back(1); else B[0].push_back(1); } else { if(i>k) B[i-k].push_back(0); else if(i<k) B[k-i+100].push_back(0); else B[0].push_back(0); } } } for(int i=0; i<N; i++) { int flag=0; for(int j=0; j<B[i].size(); j++) { if(!flag && B[i][j]) { cnt++; flag=1; } if(!B[i][j]) flag=0; } } return cnt; } int main() { //freopen("input.txt", "r", stdin); int t; cin>>t; while(t--) { scanf("%d",&n); for(int i=0; i<N; i++) R[i].clear(),B[i].clear(); for(int i=1; i<=n; i++) scanf("%s", grid[i]+1); printf("%d\n",cal( strlen( grid[1]+1 ) )); } return 0; }
AC代码
相关文章推荐
- hdu5326_(优美的并查集解法)2015 Multi-University Training Contest 3(1011)
- XSSFDataValidationHelper.createDateConstraint有Bug
- Sinatra:一个可以作为Rails有益补充的框架. 简洁而不简单
- 15/7/27/正则表达式/进程线程/wait/notify
- 语言中如何在main函数开始前执行函数
- HDU 5319 Painter (模拟 脑洞题)
- 2015 Multi-University Training Contest 3
- Acboy needs your help again!
- Failed to install *.apk on device 'emulator-5554': timeout
- 2015 Multi-University Training Contest 3(hdu 5316、5317、5319、5323、5325、5326)线段树+数学+yy+矩阵快速幂
- 2015 Multi-University Training Contest 3
- Aizu 0009 Prime Number
- this,static,main参数作用,方法,对象的生存
- Rails Model验证之强大
- Kafka设计解析(三):Kafka High Availability (下)
- HDU2124——Repair the Wall(贪心水题)
- Kafka设计解析(二):Kafka High Availability (上)
- [Poj3523][Uva1601][Aizu1281] The Morning after Halloween 【A*算法】
- Aizu 0005 GCD and LCM
- 一次AIX系统报错的问题处理思路