一开始我把题面看成 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;
}