「题解」:砖块
Posted xingmi-weiyouni
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「题解」:砖块相关的知识,希望对你有一定的参考价值。
问题 A: 砖块
时间限制: 1 Sec 内存限制: 256 MB
题面
题面谢绝公开。
题解
大模拟需要题解么??
#include<bits/stdc++.h> #define rint register int using namespace std; int T,len,vis[1111][1111],ans; int l;//l表示长边在哪个方向,1表南北,2表东西,0表底面在下。 int x,y;//左下角在网格中占据的坐标 int h;//高度 char ch[103]; inline int Max(int A,int B)return A>B?A:B; inline void North()if(l==0)y+=1;l=1;else if(l==1)y+=h;l=0;else y+=1; inline void South()if(l==0)y-=h;l=1;else if(l==1)y-=1;l=0;else y-=1; inline void East()if(l==0)x+=1;l=2;else if(l==1)x+=1;elsex+=h;l=0; inline void West()if(l==0)x-=h;l=2;else if(l==1)x-=1;elsex-=1;l=0; int main() // freopen("ex_block2.in","r",stdin); // freopen("my.out","w",stdout); scanf("%d",&T); while(T--) l=x=y=len=ans=0; memset(vis,0,sizeof(vis)); scanf("%d %s",&h,ch+1); len=strlen(ch+1);vis[555][555]=1; for(rint i=1;i<=len;++i) switch(ch[i]) case ‘N‘:North();break; case ‘S‘:South();break; case ‘E‘:East(); break; case ‘W‘:West(); break; if(l==0) vis[x+555][y+555]++; ans=Max(ans,vis[x+555][y+555]); else if(l==1) for(rint i=0;i<h;++i) vis[x+555][y+i+555]++; ans=Max(ans,vis[x+555][y+i+555]); else for(rint i=0;i<h;++i) vis[x+i+555][y+555]++; ans=Max(ans,vis[x+i+555][y+555]); if(l==0) printf("%d\n%d\n%d\n",x,y,ans); else if(l==1) for(rint i=0;i<h;++i)printf("%d ",x);puts(""); for(rint i=0;i<h;++i)printf("%d ",y+i);puts(""); printf("%d\n",ans); else for(rint i=0;i<h;++i)printf("%d ",x+i);puts(""); for(rint i=0;i<h;++i)printf("%d ",y);puts(""); printf("%d\n",ans); return 0;
以上是关于「题解」:砖块的主要内容,如果未能解决你的问题,请参考以下文章