链接:
https://www.nowcoder.com/acm/contest/118/D
来源:牛客网
链接:
https://www.nowcoder.com/acm/contest/118/D
来源:牛客网
来源:牛客网
题目描述
1, 2, 3在打篮球, 可是二打一总是不公平的, 于是他们决定一对一,另一个人在边上看着, 谁输了谁就和下场和在边上看着的那个人交换。 现在给你一个胜利者的序列(每一轮胜利的人), 问这个序列合不合法。(一开始1,2单挑, 3在下面看着)
输入描述:
第一个数是数字n(1<=n<=100), 代表输入的胜利者序列的规模, 接下来的n行描述了胜利者序列。第i行包含一个正整数a[i],(1<=a[i]<=3),代表着a[i]赢得比赛
输出描述:
输出YES如果胜利者序列合法, 否则NO
来源:牛客网
示例1
输入
3 1 1 2 2 1 2
输出
YES NO
说明
第一个例子中, 1赢了2, 3代替2; 1赢了3, 2代替3; 2赢了
第二个例子中, 1赢了2, 3代替2, 这时候2明显已经在场下了故不可能为胜利者
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
const int maxn=500+10;
char w[maxn][maxn];
char temp[maxn][maxn];
char vis[maxn][maxn];
int T,m,n,k;
int first=0;
void dfs(int x,int y){
if(w[x][y]=='.')temp[x][y]='0';
for(int g=-1;g<=1;g++){
for(int h=-1;h<=1;h++){
int newx=x+g;
int newy=y+h;
if(newx>=1&&newx<=m&&newy>=1&&newy<=n){
if(isdigit(w[newx][newy]))
temp[newx][newy]=w[newx][newy];
else if(!vis[newx][newy]&&w[newx][newy]=='.'){
vis[newx][newy]=true;
dfs(newx,newy);
}
}
}
}
}
int main(){
cin>>T;
while(T--){
memset(w,'.',sizeof(w));
memset(temp,'.',sizeof(temp));
memset(vis,false,sizeof(vis));
cin>>m>>n>>k;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++){
cin>>w[i][j];
temp[i][j]='.';
}
bool abu=true;
for(int i=0;i<k;i++){
int x,y;
cin>>x>>y;
if(isdigit(w[x][y]))
temp[x][y]=w[x][y];
else if(w[x][y]=='*'){
if(abu==true){
first=i+1;
abu=false;
}
}
else
dfs(x,y);
}
if(abu==true){
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++)
if(j==1)
cout<<temp[i][j];
else
cout<<" "<<temp[i][j];
cout<<endl;
}
}
else
cout<<"Game over in step "<<first<<endl;
}
return 0;
}