和题解思路一样,但是不知道为什么50pts
查看原帖
和题解思路一样,但是不知道为什么50pts
776306
FengYuXinMing楼主2024/10/27 08:11

大概用的就是普通的模拟,nm数组记录森林,z代表走过了,然后xx,yy是xy值,一直在变d就是方向,求大佬调一下

#include<bits/stdc++.h>
using namespace std;

const int Maxn = 1e3+5;
int T,n,m,k;
int xx,yy,d;
char nm[Maxn][Maxn];

int main()
{
	cin >> T;
	for (int i = 1;i <= T;i++){
		int sum = 1;
		cin >> n >> m >> k;
		cin >> xx >> yy >> d;
		nm[xx][yy] = 'z';
		for (int j = 1;j <= n;j++){
			for (int k = 1;k <= m;k++){
				cin >> nm[j][k];
			}
		}
		for (int l = 1;l <= k;l++){
			if (d == 0){
				if (yy+1 <= m && nm[xx][yy+1] != 'x'){
					if (nm[xx][yy+1] != 'z'){
						sum++;
						nm[xx][yy+1] = 'z';
					}
					yy+=1;
				}
				else d = (d+1) % 4;
			}
			else if (d == 1){
				if (xx+1 <= n && nm[xx+1][yy] != 'x'){
					if (nm[xx+1][yy] != 'z'){
						sum++;
						nm[xx+1][yy] = 'z';
					}
					xx+=1;
				}
				else d = (d+1) % 4;
			}
			else if (d == 2){
				if (yy-1 > 0 && nm[xx][yy-1] != 'x'){
					if (nm[xx][yy-1] != 'z'){
						sum++;
						nm[xx][yy-1] = 'z';
					}
					yy-=1;
				}
				else d = (d+1) % 4;
			}
			else if (d == 3){
				if(xx-1 > 0 && nm[xx-1][yy] != 'x'){
					if (nm[xx-1][yy] != 'z'){
						sum++;
						nm[xx-1][yy] = 'z';
					}
					xx-=1;
				} 
				else d = (d+1) % 4;
			}
		}
		cout << sum << endl;
	}
	return 0;
}

注:文件读入和写入我删了,赛时写了()

2024/10/27 08:11
加载中...