#1#2#3AC,#18#19#20RE,其它WA,15分求救。
查看原帖
#1#2#3AC,#18#19#20RE,其它WA,15分求救。
1582084
nuts_aguo楼主2024/11/23 19:02
#include<bits/stdc++.h>
using namespace std;
int n,m,A=0/*本行A的数量 */,B=0/*本行B的数量 */,hw/*记录墙在本行的哪一个位置*/ ;
bool H=false;//判断本行是否有墙
string s;//辅助出入
char a[105][105];
int main() {
	cin>>n>>m;
	for(int i=0; i<n; i++) {
		cin>>s;//输入字符串
		for(int j=0; j<m; j++) {
			a[i][j]=s[j];//字符串转字符数组
		}
	}
	for(int i=0; i<n; i++) {
		B=0;//本行A的数量
		A=0;//本行B的数量
		for(int j=0; j<m; j++) {
			if(a[i][j]=='A') A++;
			if(a[i][j]=='B') B++;
			if(a[i][j]=='H') {//判断本行是否有墙
				H=true;
				hw=j;//记录墙在本行的哪一个位置
			}
		}
		if(H) {//如果本行有墙
			int bb=m-B;
			for(int j=0; j<m; j++) a[i][j]='#';
			a[i][hw]='H';
			for(int j=0; j<A; j++) a[i][j]='A';
			for(int j=bb; j<m; j++) a[i][j]='B';
		} else if(A==0||B==0) {//判断是否有一方人数为0 
			continue;
		} else { //如果本行没有墙
			if(A>B) {//如果A赢
				int aa=m-A;
				for(int j=0; j<m; j++) a[i][j]='#';
				for(int j=aa+0; j<m; j++) a[i][j]='A';
			} else if(A==B) {//如果平局
				for(int j=0; j<m; j++) a[i][j]='#';
			} else {//如果B赢
				for(int j=0; j<m; j++) a[i][j]='#';
				for(int j=0; j<B; j++) a[i][j]='B';
			}
		}
		H=false;
	}
	for(int i=0; i<n; i++) {//判断他的上方或下方有没有友方的士兵与他相邻,有则消失,否则不动
		for(int j=0; j<m; j++) {
			if(a[i][j]=='#') continue;

			if(a[i][j]==a[i-1][j]||a[i][j]==a[i+1][j]) {
				a[i][j]='#';
			} else {
				continue;
			}
		}
	}
	for(int i=0; i<n; i++) {//输出结果
		for(int j=0; j<m; j++) {
			cout<<a[i][j];
		}
		cout<<endl;
	}
	return 0;
}
2024/11/23 19:02
加载中...