Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
看了题意后AC- - 还是懒得看英语#include<cstdio> #include<cstring> using namespace std; char map[20][25], np[20][25]; bool vis[11][16]; int max, num, col, row[16]; int dx[4]= {0,0,-1,1}; int dy[4]= {1,-1,0,0}; void dfs(int x,int y) { int i, j, nx, ny; vis[x][y]=true; num++; for(i=0; i<4; i++) { nx=x+dx[i], ny=y+dy[i]; if(nx<0||ny<0||ny>=col||nx>=row[ny]) continue; if(map[x][y]!=map[nx][ny]||vis[nx][ny]) continue; dfs(nx,ny); } } void update(int x,int y) { int i, j, nx, ny; char temp=map[x][y]; map[x][y]='#'; for(i=0; i<4; i++) { nx=x+dx[i], ny=y+dy[i]; if(nx<0||ny<0||ny>=col||nx>=row[ny]) continue; if(temp!=map[nx][ny]) continue; update(nx,ny); } } int main() { int t, i, j, st, ed, ball, ncase=0, sum; scanf("%d",&t); while(t--) { sum=0; for(i=9; i>=0; i--) { for(j=0; j<15; j++) { scanf(" %c",&map[i][j]); } } ball=0, col=15; for(i=0; i<15; i++) row[i]=10; printf("Game %d:\n\n",++ncase); while(true) { max=0; memset(vis,0,sizeof(vis)); for(j=0; j<col; j++) { for(i=0; i<row[j]; i++) { if(!vis[i][j]) { num=0; dfs(i,j); if(num>max) { st=i, ed=j; max=num; } } } } if(max<2) break; printf("Move %d at (%d,%d): removed %d balls of color %c, got %d points.\n",++ball,st+1,ed+1,max,map[st][ed],(max-2)*(max-2)); sum+=(max-2)*(max-2); update(st,ed); int top, len=0; for(j=0; j<col; j++) { top=0; for(i=0; i<row[j]; i++) { if(map[i][j]!='#') { np[top++][len]=map[i][j]; } } if(top!=0) { row[len]=top; len++; } } col=len; for(j=0; j<col; j++) { for(i=0; i<row[j]; i++) { map[i][j]=np[i][j]; } } } int left=0; for(j=0; j<col; j++) { left+=row[j]; } if(left==0) sum+=1000; printf("Final score: %d, with %d balls remaining.\n",sum,left); if(t>0) puts(""); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator