链接:点击打开链接
题意:有两把刷子,红色刷子沿‘\’方向,蓝色刷子沿‘\’方向,先用红色刷子再用蓝色刷子,都刷到的格子为绿色。给出一个矩阵表示最后的状态,求最少需要刷多少次可以达到最后的状态
代码:
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
char s[105][105];
int main(){
int t,n,m,i,j,x,y,ans;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%s",s[i]+1);
m=strlen(s[i]+1);
}
ans=0;
for(i=1;i<=n;i++){ //换一个角度考虑,考虑对每个点来说哪种
for(j=1;j<=m;j++){ //情况不用考虑
if(s[i][j]=='R')
if(s[i-1][j-1]!='R'&&s[i-1][j-1]!='G')
ans++;
if(s[i][j]=='B')
if(s[i-1][j+1]!='B'&&s[i-1][j+1]!='G')
ans++;
if(s[i][j]=='G'){
if(s[i-1][j+1]!='B'&&s[i-1][j+1]!='G')
ans++;
if(s[i-1][j-1]!='R'&&s[i-1][j-1]!='G')
ans++;
}
}
}
printf("%d\n",ans);
}
return 0;
}