蒟蒻求助 qwq
查看原帖
蒟蒻求助 qwq
559503
j_steady楼主2022/8/7 10:38

一开始我把题面看成 n,m <=1000,写了一个阴间的东西。。。样例都过了 只有20pts qaq

#include <bits/stdc++.h>
using namespace std;
int n,m,x,y,s[1005],ans[1005][1005];
struct qwq{
	int ceng[255],cnt,cha[255],t;
}a[1005][1005];
char ch;
void play(int i){
	a[x][y].cha[++a[x][y].t] = i-a[x][y].ceng[a[x][y].cnt];
	i++;
	a[x][y].ceng[++a[x][y].cnt] = i;
}
int main (){
	scanf ("%d%d%d%d",&n,&m,&x,&y);
	for(int i=1;i<=m;i++){
		s[i] = s[i-1]+i;
	}
	int xx = x,yy = y;
	//a[x][y].ceng[++a[x][y].cnt] = 1;;
	for(int i=1;i<=m;i++){
		cin >> ch;
		if(ch == 'N'){
			y++;
			play(i);
		} 
		else if(ch == 'S'){
			y--;
			play(i);
		}
		else if(ch == 'W'){
			x--;
			play(i);
		}
		else {
			x++;
			play(i);
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			a[i][j].cha[++a[i][j].t] = m-a[i][j].ceng[a[i][j].cnt];
		}
	}
	for(int j = 1;j<=n;j++){
		for(int i = n;i>=1;i--){
			if(!a[i][j].cnt) {
				if(i == xx && j == yy) continue;
				ans[i][j] = s[m];
				continue;
			}
			for(int k=1;k<=a[i][j].t;k++){
				//printf ("%d qwq",a[i][j].ceng[a[i][j].cnt]);
				ans[i][j]+=s[a[i][j].cha[k]];
			}
		}
	}
	ans[xx][yy] += s[m-1];
	for(int i = n;i>=1;i--){
		for(int j=1;j<=n;j++){
			printf ("%d ",ans[j][i]);
		}
		puts("");
	}
	return 0;
}
2022/8/7 10:38
加载中...