谁说我做不出来大模拟题的?
大码量警告:我4.2k,skyh 3.6k,tdcp 4.9k.orz mikufun 2.7k
其实绝大多数部分都是在复制粘贴。
首先,60分暴力不讲可以的嘛?纯粹模拟诶。
1 #include<cstdio> 2 int n,m,x,nx,ny,ndir,ans,bl[1005][1005],al[1005][1005][4],ne[200005],sw[200005];//0NE 1SE 2SW 3Nw 3 const int tox[4]={1,1,-1,-1},toy[4]={-1,1,1,-1},c1[4]={3,2,1,0},c2[4]={1,0,3,2}; 4 char s[3]; 5 int main(){ 6 scanf("%d%d%d",&n,&m,&x); 7 for(int i=1,a,b;i<=x;++i)scanf("%d%d",&a,&b),bl[a][b]=1; 8 for(int i=0;i<=n+1;++i)bl[i][0]=bl[i][m+1]=1; 9 for(int i=0;i<=m+1;++i)bl[n+1][i]=bl[0][i]=1; 10 scanf("%d%d%s",&nx,&ny,s); 11 if(s[0]=='S'&&s[1]=='E')ndir=1; 12 if(s[0]=='S'&&s[1]=='W')ndir=2; 13 if(s[0]=='N'&&s[1]=='E')ndir=0; 14 if(s[0]=='N'&&s[1]=='W')ndir=3; 15 while(1){//printf("%d %d\n",nx,ny); 16 if(al[nx][ny][ndir])break; 17 al[nx][ny][ndir]=1; 18 if(!bl[nx+tox[ndir]][ny+toy[ndir]]){nx+=tox[ndir];ny+=toy[ndir];continue;} 19 if(bl[nx+tox[ndir]][ny]&&bl[nx][ny+toy[ndir]]){ndir=(ndir>=2?ndir-2:ndir+2);continue;} 20 if(bl[nx+tox[ndir]][ny]){ny+=toy[ndir];ndir=c1[ndir];continue;} 21 if(bl[nx][ny+toy[ndir]]){nx+=tox[ndir];ndir=c2[ndir];continue;} 22 ndir=(ndir>=2?ndir-2:ndir+2); 23 } 24 for(int i=1;i<=n;++i)for(int j=1;j<=m;++j) 25 if(al[i][j][0]||al[i][j][1]||al[i][j][2]||al[i][j][3]) ans++; 26 printf("%d",ans); 27 }