
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define int long long 4 #define re register 5 inline int read() 6 { 7 int x=0,f=1;char cc=getchar(); 8 while(cc>'9'||cc<'0'){if(cc=='-')f=-1;cc=getchar();} 9 while(cc>='0'&&cc<='9'){x=(x<<1)+(x<<3)+cc-'0';cc=getchar();} 10 return x*f; 11 } 12 int n,m; 13 int mp[10][10]; 14 int las[10][10]; 15 bool vis[10][10]; 16 int ans=0; 17 bool jud=0; 18 inline bool judge() 19 { 20 for(int i=1;i<=n;i++) 21 { 22 for(int j=1;j<=n;j++) 23 { 24 if(mp[i][j]!=las[i][j])return 0; 25 } 26 } 27 return 1; 28 } 29 inline void debug()//记得删! 30 { 31 for(int i=1;i<=n;i++) 32 { 33 for(int j=1;j<=n;j++) 34 { 35 printf("%lld ",mp[i][j]); 36 } 37 puts(""); 38 } 39 puts(""); 40 return ; 41 } 42 inline void get(int dir) 43 { 44 //0/1/2/3分别代表上下左右! 45 memset(vis,0,sizeof(vis)); 46 for(int i=1;i<=n;i++) 47 { 48 for(int j=1;j<=n;j++) 49 { 50 las[i][j]=mp[i][j]; 51 } 52 } 53 if(dir==0) 54 { 55 for(int i=1;i<=n;i++) 56 { 57 for(int j=1;j<=n;j++) 58 { 59 if(!mp[i][j])continue; 60 int cp=i-1; 61 while(!mp[cp-1][j]&&cp-1>=1)cp--; 62 if(mp[cp][j])cp++; 63 cp=max(cp,1ll); 64 //printf("up %d %d %d %d\n",i,j,cp,j); 65 if(mp[cp-1][j]&&mp[cp-1][j]==mp[i][j]&&!vis[cp-1][j]) 66 { 67 mp[cp-1][j]*=2;ans+=mp[cp-1][j];vis[cp-1][j]=1; 68 mp[cp][j]=mp[i][j]=0; 69 } 70 else 71 { 72 int pc=mp[i][j];mp[i][j]=0;mp[cp][j]=pc; 73 } 74 75 } 76 } 77 } 78 else if(dir==1) 79 { 80 for(int i=n;i>=1;i--) 81 { 82 for(int j=1;j<=n;j++) 83 { 84 if(!mp[i][j])continue; 85 int cp=i+1; 86 while(!mp[cp+1][j]&&cp+1<=n)cp++; 87 if(mp[cp][j])cp--; 88 cp=min(cp,n); 89 //printf("down %d %d %d %d\n",i,j,cp,j); 90 if(mp[cp+1][j]&&mp[cp+1][j]==mp[i][j]&&!vis[cp+1][j]) 91 { 92 //printf("*2maker_it!\n"); 93 mp[cp+1][j]*=2;ans+=mp[cp+1][j];vis[cp+1][j]=1; 94 mp[i][j]=mp[cp][j]=0; 95 } 96 else 97 { 98 //printf("putong maker_it\n"); 99 int pc=mp[i][j];mp[i][j]=0;mp[cp][j]=pc; 100 } 101 } 102 } 103 } 104 else if(dir==2) 105 { 106 for(int j=1;j<=n;j++) 107 { 108 for(int i=1;i<=n;i++) 109 { 110 if(!mp[i][j])continue; 111 int cp=j-1; 112 while(!mp[i][cp-1]&&cp-1>=1)cp--; 113 if(mp[i][cp])cp++; 114 cp=max(cp,1ll); 115 //printf("left %d %d %d %d \n",i,j,i,cp); 116 if(mp[i][cp-1]&&mp[i][cp-1]==mp[i][j]&&!vis[i][cp-1]) 117 { 118 //printf("type1 out!\n"); 119 mp[i][cp-1]*=2;ans+=mp[i][cp-1];vis[i][cp-1]=1; 120 mp[i][j]=mp[i][cp]=0; 121 } 122 else 123 { 124 //printf("type2 out!\n"); 125 int pc=mp[i][j]; 126 mp[i][j]=0;mp[i][cp]=pc; 127 } 128 } 129 } 130 } 131 else if(dir==3) 132 { 133 for(int j=n;j>=1;j--) 134 { 135 for(int i=1;i<=n;i++) 136 { 137 if(!mp[i][j])continue; 138 int cp=j+1; 139 while(!mp[i][cp+1]&&cp+1<=n)cp++; 140 if(mp[i][cp])cp--; 141 cp=min(cp,n); 142 //printf("right %d %d %d %d \n",i,j,i,cp); 143 if(mp[i][cp+1]&&mp[i][cp+1]==mp[i][j]&&!vis[i][cp+1]) 144 { 145 mp[i][cp+1]*=2;ans+=mp[i][cp+1];vis[i][cp+1]=1; 146 mp[i][j]=mp[i][cp]=0; 147 } 148 else 149 { 150 int pc=mp[i][j];mp[i][j]=0;mp[i][cp]=pc; 151 } 152 } 153 } 154 } 155 //debug();// 156 return ; 157 } 158 inline void make(int pos,int vall) 159 { 160 int ress=0; 161 for(int i=1;i<=n;i++) 162 { 163 for(int j=1;j<=n;j++) 164 { 165 if(!mp[i][j])ress++; 166 } 167 } 168 int poss=1+pos%ress; 169 //printf("%d %d\n",ress,poss); 170 ress=0; 171 for(int i=1;i<=n;i++) 172 { 173 for(int j=1;j<=n;j++) 174 { 175 if(!mp[i][j])ress++; 176 if(ress==poss) 177 { 178 mp[i][j]=vall; 179 //printf("make : %d %d \n",i,j); 180 return ; 181 } 182 } 183 } 184 return ; 185 } 186 signed main() 187 { 188 //freopen("game_sample2.in","r",stdin); 189 //freopen("cnm1.in","r",stdin); 190 //freopen("me1.out","w",stdout); 191 int cpp=0; 192 n=read(),m=read(); 193 int xx,yy,vv; 194 xx=rand()%n+1,yy=rand()%n+1,vv=2;mp[xx][yy]=vv; 195 xx=rand()%n+1,yy=rand()%n+1,vv=2;mp[xx][yy]=vv; 196 //debug();// 197 //0/1/2/3分别代表上下左右! 198 int dir,pos,val; 199 char s; 200 while(1) 201 { 202 cin>>s; 203 if(s=='w')dir=0; 204 if(s=='s')dir=1; 205 if(s=='a')dir=2; 206 if(s=='d')dir=3; 207 pos=rand()%100,val=2; 208 //printf("%d\n",dir); 209 get(dir); 210 //printf("judement %d\n",judge()); 211 if(judge()){puts("YOU HAVE DIED!");break;} 212 cpp++; 213 make(pos,val); 214 debug(); 215 printf("%lld\n",ans); 216 } 217 printf("%d\n%d\n",cpp,ans); 218 return 0; 219 }