求大佬调洛谷月赛T1#5
  • 板块学术版
  • 楼主zhaoxibo
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/8/6 18:34
  • 上次更新2023/10/27 16:43:24
查看原帖
求大佬调洛谷月赛T1#5
592662
zhaoxibo楼主2022/8/6 18:34

求助大佬

#include<cstdio>
using namespace std;
int n,m,x,y;
int map[60][60];
bool flag[60][60];
int cnt[110][4],cnt2[60][60],tot;
char a[1010];
int main(){
	scanf("%d%d%d%d",&n,&m,&y,&x);
	flag[x][y]=true;
	int X=x,Y=y;
	for(int i=1;i<=m;i++){
		scanf("%c",&a[i]);
		while(a[i]==' '||a[i]=='\n'||a[i]=='\r') scanf("%c",&a[i]);
		if(a[i]=='N'){
			flag[++x][y]=true;
		}
		else if(a[i]=='S'){
			flag[--x][y]=true;
		}
		else if(a[i]=='E'){
			flag[x][++y]=true;
		}
		else if(a[i]=='W'){
			flag[x][--y]=true;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(flag[i][j]){
				cnt[++tot][1]=i;
				cnt[tot][2]=j;
				cnt[tot][0]=1;
				cnt2[i][j]=tot;
			}
		}
	}
	int ans=m*(m+1)/2;
	cnt[cnt2[X][Y]][0]=0;
	for(int i=1;i<=m;i++){
		for(int j=1;j<=tot;j++){
			map[cnt[j][1]][cnt[j][2]]+=cnt[j][0];
			cnt[j][0]++;
		}
		if(a[i]=='N') cnt[cnt2[++X][Y]][0]=0;
		else if(a[i]=='S') cnt[cnt2[--X][Y]][0]=0;
		else if(a[i]=='E') cnt[cnt2[X][++Y]][0]=0;
		else if(a[i]=='W') cnt[cnt2[X][--Y]][0]=0;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(flag[n-i+1][j]) printf("%d ",map[n-i+1][j]);
			else printf("%d ",ans);
		}
		printf("\n");
	}
}
2022/8/6 18:34
加载中...