连续不知道多少场了,都是一场10名以内一场20以外。。。波动极大。。。还极有规律。。。
拿到这套题,看到T1大模拟无话可说。
然后考场上我觉得T2很简单。。。。然后就码了两个半小时。
T3数据水了暴力70。。。
T1:砖块
大模拟。其实也不大。。。
记录上下左右前后边界然后滚就是了
闲得慌打hash_map
1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 #define P(a,b) make_pair(a,b) 5 struct hash_map{ 6 int fir[100003],l[100005],tox[100005],toy[100005],v[100005],cnt; 7 #define mod 100003 8 int& operator[](pair<int,int>p){ 9 int x=p.first,y=p.second,hsh=(x*y%mod+mod)%mod; 10 for(int i=fir[hsh];i;i=l[i])if(tox[i]==x&&toy[i]==y)return v[i]; 11 l[++cnt]=fir[hsh];fir[hsh]=cnt;tox[cnt]=x;toy[cnt]=y;v[cnt]=0;return v[cnt]; 12 } 13 void clear(){for(int i=0;i<mod;++i)fir[i]=0;cnt=0;} 14 }m; 15 int mxt,u,l,r,f,b;char s[105]; 16 void n_turn(){ 17 int U=u,L=l,R=r,F=f,B=b; 18 u=B-F;f=B;b=B+U; 19 for(int i=l;i<r;++i)for(int j=f;j<b;++j){int &x=m[P(i,j)];x++,mxt=max(mxt,x);} 20 } 21 void s_turn(){ 22 int U=u,L=l,R=r,F=f,B=b; 23 u=B-F;b=F;f=F-U; 24 for(int i=l;i<r;++i)for(int j=f;j<b;++j){int &x=m[P(i,j)];x++,mxt=max(mxt,x);} 25 } 26 void w_turn(){ 27 int U=u,L=l,R=r,F=f,B=b; 28 u=R-L;r=L;l=L-U; 29 for(int i=l;i<r;++i)for(int j=f;j<b;++j){int &x=m[P(i,j)];x++,mxt=max(mxt,x);} 30 } 31 void e_turn(){ 32 int U=u,L=l,R=r,F=f,B=b; 33 u=R-L;l=R;r=R+U; 34 for(int i=l;i<r;++i)for(int j=f;j<b;++j){int &x=m[P(i,j)];x++,mxt=max(mxt,x);} 35 } 36 int main(){//freopen("ex_block2.in","r",stdin); 37 int t;scanf("%d",&t); 38 while(t--){ 39 l=0,r=1,f=0,b=1,mxt=0;scanf("%d%s",&u,s);m.clear();m[P(0,0)]++; 40 for(int i=0;s[i];++i) 41 if(s[i]=='N')n_turn(); 42 else if(s[i]=='E')e_turn(); 43 else if(s[i]=='W')w_turn(); 44 else if(s[i]=='S')s_turn(); 45 for(int i=l;i<r;++i)for(int j=f;j<b;++j)printf("%d ",i);puts(""); 46 for(int i=l;i<r;++i)for(int j=f;j<b;++j)printf("%d ",j);puts(""); 47 printf("%d\n",mxt); 48 } 49 }