模拟+思维 HDOJ 5319 Painter

题目传送门

 1 /*
 2     题意:刷墙,斜45度刷红色或蓝色,相交的成绿色,每次刷的是连续的一段,知道最终结果,问最少刷几次
 3     模拟+思维:模拟能做,网上有更巧妙地做法,只要前一个不是一样的必然要刷一次,保证是最小的,脑洞大
 4 */
 5 #include <cstdio>
 6 #include <algorithm>
 7 #include <cstring>
 8 #include <cmath>
 9 using namespace std;
10
11 const int MAXN = 55;
12 const int INF = 0x3f3f3f3f;
13 char s[MAXN][MAXN];
14 bool vis[MAXN][MAXN];
15 int n, m;
16
17 int main(void)    {       //HDOJ 5319 Painter
18     //freopen ("1004.in", "r", stdin);
19
20     int T;  scanf ("%d", &T);
21     while (T--) {
22         scanf ("%d", &n);
23         for (int i=1; i<=n; ++i)    scanf ("%s", s[i] + 1);
24         memset (vis, false, sizeof (vis));  m = strlen (s[1] + 1);
25
26         int ans = 0;
27         for (int i=1; i<=n; ++i)    {
28             for (int j=1; j<=m; ++j)  {
29                 if (s[i][j] == ‘R‘ || s[i][j] == ‘G‘)   {
30                     if (!(s[i-1][j-1] == ‘R‘ || s[i-1][j-1] == ‘G‘))    ans++;
31                 }
32             }
33         }
34         for (int i=1; i<=n; ++i)    {
35             for (int j=1; j<=m; ++j)    {
36                 if (s[i][j] == ‘B‘ || s[i][j] == ‘G‘)   {
37                     if (!(s[i-1][j+1] == ‘B‘ || s[i-1][j+1] == ‘G‘))    ans++;
38                 }
39             }
40         }
41         printf ("%d\n", ans);
42     }
43
44     return 0;
45 }
时间: 2024-12-09 07:55:17

模拟+思维 HDOJ 5319 Painter的相关文章

hdoj 5319 Painter(模拟题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5319 思路分析:假设颜色R表示为1,颜色B表示为2,颜色G表示为3,因为数据量较小,采用暴力解法即可,即每次扫描对角线,看每条对角线需要画多少笔,统计所有对角线的笔数和即可: 代码如下: #include <cstdio> #include <cstring> #include <iostream> using namespace std; const int MAX_N

UVA 10881 - Piotr&#39;s Ants【模拟+思维】

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1822 题意:有很多只蚂蚁在一条直线上,每个蚂蚁移动速度都是1,并且有一个初始方向.并且当相邻两个蚂蚁相撞时转向.现在问t时间后各个蚂蚁的位置. 解法:这题的一个致命技巧就是把两只蚂蚁的相撞看作是两只蚂蚁交换穿过对方并且交换蚂蚁的编号.这个是很好理解的,类似于物理的完全弹性碰撞.又由

HDU 5319 Painter (模拟 脑洞题)

Painter Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 133    Accepted Submission(s): 67 Problem Description Mr. Hdu is an painter, as we all know, painters need ideas to innovate , one day, h

HDU 5319 Painter (模拟)

题意:一个画家画出一张,有3种颜色的笔,R.G.B.R看成'\',B看成'/',G看成这两种的重叠(即叉形).给的是一个矩阵,矩阵中只有4种符号,除了3种颜色还有'.',代表没有涂色.问最小耗费多少笔即可画成这副图? 思路:最小耗费就是斜着的可以一笔搞定,但是如果中间隔着'.'或者其他一种形状,则不能一笔,要变两笔.主要麻烦在矩阵不是正方形,而可能是长方形.其实只要按照其画法,从左上往右下方向画,逐个条斜线扫描即可.另一个方向'/'也是如此. 我看到模拟本来就不想敲,扫两遍矩阵,用了vector

DFS/BFS+思维 HDOJ 5325 Crazy Bobo

题目传送门 1 /* 2 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 3 在树上的路径权值都小于这两个点 4 DFS/BFS+思维:按照权值的大小,从小的到大的连有向边,搜索最多连接点数即是答案.因为排序后,他们之间的路径, 5 可定都是从当前节点u连过去的,那么都是小于这两个节点的.DFS需手动加栈,BFS类似拓扑排序的思路 6 */ 7 #pragma comment (linker, "/STACK:1024000000,10240000

Codeforces Round #354 (Div. 2) B. Pyramid of Glasses (模拟+思维)

原题请戳这里 题意: 将杯子摆成杨辉三角状,即顶层1个杯子,第二层2个杯子,……第N层N个杯子. 每一秒能倒满1个杯子,每次一个杯子满了,酒会平分得流入它下面支撑它的两个杯子中. 如下图所示.1 ≤ n ≤ 10, 0 ≤ t ≤ 10 000. 分析:由于n很小,所以直接模拟此过程,其实也是一个递推的过程. 注意,如果递推的时候没有递推到n+1层,那么最后统计的时候是统计>=1的个数而不是==1的个数, 因为当酒能倒满的杯子大于n层杯子即n*(n+1)/2<t时,递推过程终止于n层,不能向下

HDU 5538 House Building(模拟——思维)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5538 Problem Description Have you ever played the video game Minecraft? This game has been one of the world's most popular game in recent years. The world of Minecraft is made up of lots of 1×1×1 blocks

HDU 5319 Painter(枚举)

Painter Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 745    Accepted Submission(s): 345 Problem Description Mr. Hdu is an painter, as we all know, painters need ideas to innovate , one day,

hdu 5319 Painter

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5319 题意:给你一个正方形,一把刷子,两种刷色法. ' \' 表示沿对角刷成红色,"/" 表示沿对角刷成蓝色.蓝色红色交叉形成绿色: 问最少刷几次形成如图图案. 解法:从上到下未被刷过就直接刷. 代码: #include <stdio.h> #include <ctime> #include <math.h> #include <limits.h&