谁说我做不出来大模拟题的?

大码量警告:我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 }
只有1.1k

相关文章:

  • 2021-11-18
  • 2021-12-14
  • 2021-07-26
  • 2021-08-27
  • 2022-12-23
  • 2022-12-23
  • 2021-04-03
  • 2021-06-13
猜你喜欢
  • 2021-07-30
  • 2021-09-28
  • 2021-08-04
  • 2021-06-15
  • 2021-05-18
  • 2021-12-19
  • 2021-12-10
相关资源
相似解决方案