样例全过却 0 分。
#include <bits/stdc++.h>
using namespace std;
int n,maxrow = -15,maxline = -15;
char out = '.';
struct puzzle {
char b;
int r,s,u,d;
int row,line;
} a[30];
int b[205][205],s[205][205];
struct order {
int put,id;
} c[30];
bool cmp(const order &x,const order &y){
return x.put < y.put;
}
int main(){
scanf("%d",&n);
getchar();
for (int i = 1; i <= n; i++) scanf("%c%d%d%d%d",&a[i].b,&a[i].r,&a[i].s,&a[i].u,&a[i].d),getchar();
for (int i = 1; i <= n; i++) scanf("%d",&c[i].put),c[i].id = i;
sort(c + 1,c + n + 1,cmp);
for (int i = 1; i <= n; i++) {
int k = a[c[i].id].b - 'a' + 1,setrow,setline;
if (i == 1) {
setrow = 1;
setline = 1;
}
else {
if (a[c[i - 1].id].u == 0) {
setrow = a[c[i - 1].id].row + a[c[i - 1].id].r;
setline = a[c[i - 1].id].line + a[c[i - 1].id].d - 1;
}
else {
setrow = a[c[i - 1].id].row + a[c[i - 1].id].r - a[c[i - 1].id].d;
setline = a[c[i - 1].id].line + a[c[i - 1].id].s;
}
}
b[setrow][setline] += k;
b[setrow][setline + a[c[i].id].s] -= k;
b[setrow + a[c[i].id].r][setline] -= k;
b[setrow + a[c[i].id].r][setline + a[c[i].id].s] += k;
a[c[i].id].row = setrow;
a[c[i].id].line = setline;
maxrow = max(maxrow,setrow + a[c[i].id].r - 1);
maxline = max(maxline,setline + a[c[i].id].s - 1);
}
for (int i = 1; i <= maxrow; i++)
for (int j = 1; j <= maxline; j++)
s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + b[i][j];
printf("%d %d\n",maxrow,maxline);
for (int i = maxrow; i >= 1; i--) {
for (int j = 1; j <= maxline; j++) printf("%c",s[i][j] != 0 ? s[i][j] + 'a' - 1 : out);
printf("\n");
}
return 0;
}