HDU 5319 两把刷子刷墙问题(多校)-直接模拟

题意:有两把刷子,一把刷红色,一把刷蓝色,红色的方向是东南,蓝色的方向是西北,红色加蓝色等于绿色,现在已知这面墙当前的状态,求从白墙到这个状态最少刷了多少次

分析:多校题,所以尽管我一开始就觉得是直接模拟没有什么技巧,还是一直不敢交。1A很开心,加油!

代码:

#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int t,n;
string a[100];
int main()
{
	cin>>t;
	while(t--){
		cin>>n;
		int tot=0;
		for(int i=0;i<n;i++)
		   cin>>a[i];
		int m=a[0].length();
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				if(a[i][j]=='B'||a[i][j]=='b'){
					tot++;
					for(int k=1;i+k<n&&j-k>=0;k++){
						if(a[i+k][j-k]=='B'||a[i+k][j-k]=='b') a[i+k][j-k]='.';
						else if(a[i+k][j-k]=='G') a[i+k][j-k]='r';
						else break;
					}
				}
				else if(a[i][j]=='R'||a[i][j]=='r'){
					tot++;
					for(int k=1;i+k<n&&j+k<m;k++){
						if(a[i+k][j+k]=='R'||a[i+k][j+k]=='r') a[i+k][j+k]='.';
						else if(a[i+k][j+k]=='G') a[i+k][j+k]='b';
						else break;
					}
				}
			    else if(a[i][j]=='G'){
			    	tot+=2;
			    	for(int k=1;i+k<n&&j-k>=0;k++){
			    		if(a[i+k][j-k]=='B'||a[i+k][j-k]=='b') a[i+k][j-k]='.';
			    		else if(a[i+k][j-k]=='G') a[i+k][j-k]='r';
			    		else break;
			    	}
			    	for(int k=1;i+k<n&&j+k<m;k++){
			    		if(a[i+k][j+k]=='R'||a[i+k][j+k]=='r') a[i+k][j+k]='.';
			    		else if(a[i+k][j+k]=='G') a[i+k][j+k]='b';
			    		else break;
			    	}
			    }
			}
		}
		cout<<tot<<endl;
	}
} 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 07:54:54

HDU 5319 两把刷子刷墙问题(多校)-直接模拟的相关文章

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

关于How,刷墙和亲戚

对于需求而言,最宏观的概念是六字诀: Who->Where->Which->How->End->Effect:谁(Who)在什么地方(Where),对那个对象(Which)做了什么(How),做完了(End),影响是什么(Effect): 在How上面要做的文章是最多的,How其实本质就是场景,操作,数据(对象). 刷墙 只要是被操作的数据就需要考虑是否需要添加状态,比如IMS审批从NPIOT系统中抽调的数据就需要考虑是否需要加状态,防止审批期间物料被移动:不加状态,就代表着

HDU 5319(2015多校3)-Painter(dfs)

题目地址:HDU 5319 题意:给一个图n*m,原来全是点('.'). 现在要把图染成已给出的样子. 要求当是'\'的情况只用红色,是'/'的情况只用蓝色,当一个格子同时被红色和蓝色染得时候变成绿色.(每个格子只画一次). 思路:这题只要模拟一下刷的过程就行了,如果出现了R,就刷R刷到底,出现B就刷B,出现G就左右各刷一次. #include <stdio.h> #include <math.h> #include <string.h> #include <st

洛谷P2070 刷墙 离散化

洛谷P2070 刷墙 离散化题意 区间覆盖 求覆盖了2次以上的线段有多少长 离散化一下,一条线段两个点,2n个点排序一下就行了 1 #include <bits/stdc++.h> 2 #define For(i, j, k) for(int i=j; i<=k; i++) 3 #define Dow(i, j, k) for(int i=j; i>=k; i--) 4 #define LL long long 5 using namespace std; 6 inline int

JN 刷墙 过程DP

题目 3 刷墙(wall.c/cpp/pas)3.1 题目描述Will 被指派去刷墙. 他?共需要刷N ?墙, 每?墙要求刷?种颜?. 他?共有N 桶油漆, 这些油漆?共有3种颜?, 每种颜?的油漆分别有C0, C1, C2 桶. 刷??墙需要??桶油漆, 这N 桶油漆恰好可以刷完这N ?墙(C0 + C1 + C2 = N).但刷墙也不是随便可以刷的. Will 要求, 相邻的墙?的颜??定要满?他的要求. 他有时会希望某两种颜?可以不连续出现. 他想知道, 在满?他的要求下, ?共由多少种刷

hdu 4970 killing monster 代代相传刷qq 不用线段树啦~

[题意]塔防游戏,一条n长的路上,有m个炮台,可以覆盖[li,ri]范围,威力ci,即每一秒,炮塔可以对范围 内的怪物可以造成ci点伤害.只有有q只怪物,每只怪物有hi点血,出现位置为xi:当怪物血量减少到0或以下时消失,怪物一直朝n位置前进.问有几只怪物可以离开这条路. [题解]用线段树可以做,不过还好我们有代代相传的刷qq 算法 ,让解法变得简单的多~    ^_^ 1 #include <iostream> 2 #include <cstdio> 3 #include <

大神手机下乡刷墙的价值

刷墙!简单粗暴,是接近农村农户最快的方式. 据报道,2015年初,大神手机在全国8省56县区合计刷墙560余面,刷墙让更多的消费者了解并购买了大神手机. 农村市场的重要性 目前,全国地级市500个左右,县级市2100多个,乡镇4万多个,农村家庭占家庭总量的67.6%,众所周知的原因,农村人使用的手机远不能跟城市相比. 近年的"新农村建设","城镇化建设",使得农村居民收入增速不断提高,在一些城镇化建设较快的乡镇,返乡人员增多,消费能力也不断提升,农村已成为智能手机不

HDU 1798 两圆相交面积

Tell me the area Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1755    Accepted Submission(s): 535 Problem Description There are two circles in the plane (shown in the below picture), there is

hdu 4920 Matrix multiplication(矩阵相乘)多校训练第5场

Matrix multiplication                                                                           Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description Given two matrices A and B of size n×n, find the