#include<cstdio>
#include<vector>
char a[707][707][33];
int r[707][707];
int val(const char,const int,const int,const int);
void cal(const int,const int,const int,const int,const int,const int,const std::vector<int>&,std::vector<int>&);
void dnc(const int,const int,const int,const int,const std::vector<int>&,std::vector<int>&);
int main()
{
std::vector<int> in,out;
int i,j,n,m;
scanf("%d%d",&n,&m);
for(i=1;i<n;i++)for(j=1;j<n;j++)scanf("%s",a[i][j]);
in.resize(4*(n+1)*(n+1));
out.resize(4*(n+1)*(n+1));
while(m--)
{
scanf("%d%d%*s",&i,&j);
i++;
j+=i;
in[i*2*(n+1)+j]++;
}
dnc(0,0,n+1,n+1,in,out);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)printf("%d ",r[i][j]+1);
puts("");
}
}
int val(const char c,const int l,const int d,const int u)
{
return c=='L'?l:c=='D'?d:u;
}
void cal(const int sx,const int sy,const int ex,const int ey,const int of,const int sz,const std::vector<int> &in,std::vector<int> &out)
{
int i,x,y,z,tsz;
std::vector<int> tin,tout;
tsz=ex+ey-sx-sy;
tin.resize(tsz*tsz);
tout.resize(tsz*tsz);
for(i=0;i<sz*sz;i++)if(in[i])
{
x=std::min(std::max(out[i]/sz-of,0),tsz-1);
y=std::min(std::max(out[i]%sz-of,0),tsz-1);
tin[x*tsz+y]+=in[i];
}
dnc(sx,sy,ex,ey,tin,tout);
for(i=0;i<sz*sz;i++)if(in[i])
{
x=out[i]/sz-of;
y=out[i]%sz-of;
if(x>=0&&x<tsz)
{
if(y>=0&&y<tsz)
{
z=tout[x*tsz+y];
x=z/tsz;
y=z%tsz;
}
else x=tout[x*tsz+tsz-1]/tsz;
}
else if(y>=0&&y<tsz)y=tout[y]%tsz;
out[i]=(x+of)*sz+(y+of);
}
}
void dnc(const int sx,const int sy,const int ex,const int ey,const std::vector<int> &in,std::vector<int> &out)
{
int i,sz;
sz=ex+ey-sx-sy;
for(i=0;i<sz*sz;i++)out[i]=i;
if(ex-sx<2||ey-sy<2)return;
if(ex-sx==2&&ey-sy==2)
{
int x,y,z;
for(i=0;i<sz*sz;i++)if(in[i])
{
x=(i<4)+((i&3)<1);
y=(i<8)+((i&3)<2);
z=(i<12)+((i&3)<3);
r[sx][sy]+=in[i]*y;
y=val(a[sx+1][sy+1][x*9+y*3+z],x,y,z);
out[i]=(((x<1)+(y<1)+(z<1))<<2)|((x<2)+(y<2)+(z<2));
}
return;
}
int tx,ty;
std::vector<int> tin,tout;
tx=(sx+ex)/2;
ty=(sy+ey)/2;
sz=ex+ey-sx-sy;
cal(sx,sy,tx+1,ty+1,ex-tx-1,sz,in,out);
cal(sx,ty,tx+1,ey,ex+ty-tx-sy-1,sz,in,out);
cal(tx,sy,ex,ty+1,0,sz,in,out);
cal(tx,ty,ex,ey,ty-sy,sz,in,out);
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
19640 KB |
Output is correct |
2 |
Correct |
0 ms |
19640 KB |
Output is correct |
3 |
Correct |
11 ms |
19960 KB |
Output is correct |
4 |
Correct |
13 ms |
19960 KB |
Output is correct |
5 |
Correct |
120 ms |
23368 KB |
Output is correct |
6 |
Correct |
99 ms |
23368 KB |
Output is correct |
7 |
Correct |
115 ms |
23368 KB |
Output is correct |
8 |
Correct |
259 ms |
30112 KB |
Output is correct |
9 |
Correct |
269 ms |
30112 KB |
Output is correct |
10 |
Correct |
625 ms |
40076 KB |
Output is correct |
11 |
Correct |
653 ms |
40076 KB |
Output is correct |
12 |
Correct |
606 ms |
40076 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
19640 KB |
Output is correct |
2 |
Correct |
128 ms |
23368 KB |
Output is correct |
3 |
Correct |
220 ms |
26252 KB |
Output is correct |
4 |
Correct |
701 ms |
40076 KB |
Output is correct |
5 |
Correct |
687 ms |
40076 KB |
Output is correct |
6 |
Correct |
676 ms |
40076 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
19640 KB |
Output is correct |
2 |
Correct |
24 ms |
19960 KB |
Output is correct |
3 |
Correct |
338 ms |
30112 KB |
Output is correct |
4 |
Correct |
761 ms |
40076 KB |
Output is correct |
5 |
Correct |
757 ms |
40076 KB |
Output is correct |
6 |
Correct |
755 ms |
40076 KB |
Output is correct |
7 |
Correct |
794 ms |
40076 KB |
Output is correct |
8 |
Correct |
859 ms |
40076 KB |
Output is correct |
9 |
Correct |
850 ms |
40076 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
673 ms |
30112 KB |
Output is correct |
2 |
Correct |
768 ms |
30112 KB |
Output is correct |
3 |
Correct |
2238 ms |
40076 KB |
Output is correct |
4 |
Correct |
1183 ms |
40076 KB |
Output is correct |
5 |
Correct |
1232 ms |
40076 KB |
Output is correct |
6 |
Correct |
1208 ms |
40076 KB |
Output is correct |
7 |
Correct |
1209 ms |
40076 KB |
Output is correct |
8 |
Correct |
1187 ms |
40076 KB |
Output is correct |
9 |
Correct |
1323 ms |
40076 KB |
Output is correct |
10 |
Correct |
1325 ms |
40076 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
19640 KB |
Output is correct |
2 |
Correct |
0 ms |
19640 KB |
Output is correct |
3 |
Correct |
0 ms |
19640 KB |
Output is correct |
4 |
Correct |
0 ms |
19640 KB |
Output is correct |
5 |
Correct |
109 ms |
19640 KB |
Output is correct |
6 |
Correct |
215 ms |
19640 KB |
Output is correct |
7 |
Correct |
248 ms |
19640 KB |
Output is correct |
8 |
Correct |
289 ms |
19640 KB |
Output is correct |
9 |
Correct |
1526 ms |
40036 KB |
Output is correct |
10 |
Correct |
2197 ms |
40036 KB |
Output is correct |
11 |
Correct |
1498 ms |
40036 KB |
Output is correct |
12 |
Correct |
1230 ms |
40036 KB |
Output is correct |
13 |
Correct |
1191 ms |
40036 KB |
Output is correct |
14 |
Correct |
1482 ms |
40076 KB |
Output is correct |
15 |
Correct |
2210 ms |
40076 KB |
Output is correct |
16 |
Correct |
1502 ms |
40076 KB |
Output is correct |
17 |
Correct |
1213 ms |
40076 KB |
Output is correct |
18 |
Correct |
1297 ms |
40076 KB |
Output is correct |