标签:des style color os strong io for ar
Problem Description5 5 35552 31154 33222 21134 12314Sample Output
32Hint
35552 00552 00002 00002 00000 00000 31154 05154 05104 00004 00002 00000 33222 -> 01222 -> 01222 -> 00122 -> 00104 -> 00100 21134 21134 21134 25234 25234 25230 12314 12314 12314 12314 12314 12312 The total point is 12+6+6+2+6=32.
好恶心的一道模拟题
题意:给你一个方格,有不同颜色,消除颜色会有下移和左移(如果出现空格)
做了一,感觉不会做二了,上挫码=。=,dfs搜联通块。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<limits.h> using namespace std; int mp[22][22]; int visit[22][22]; int dr[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; int n,m,s; void dfs(int x,int y,int sum)//dfs搜索联通区域 { visit[x][y]=1; for(int i=0;i<4;i++) { int xx=x+dr[i][0]; int yy=y+dr[i][1]; if(!visit[xx][yy]&&mp[xx][yy]==sum) { s++; dfs(xx,yy,sum); } } return ; } int main() { int sx,sy; while(~scanf("%d%d",&n,&m)) { for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) scanf("%1d",&mp[i][j]); } int ans=0; while(1) { int k=0; for(int i=1;i<=n;i++)//选择最大的联通块 { for(int j=1;j<=m;j++) { if(mp[i][j]) { memset(visit,0,sizeof(visit)); s=1; dfs(i,j,mp[i][j]); if(s>k) { sx=i; sy=j; k=s; } } } } if(k<1) break;//不要写成k<=1=。= ans+=k*(k-1); memset(visit,0,sizeof(visit));//对联通块进行标志 dfs(sx,sy,mp[sx][sy]); for(int i=1;i<=n;i++)//联通块消0 { for(int j=1;j<=m;j++) { if(visit[i][j]) mp[i][j]=0; } } for(int j=1;j<=m;j++)//竖向消0 { for(int i=1;i<=n;i++) { if(mp[i][j]==0) { for(int k=i;k>1;k--) mp[k][j]=mp[k-1][j]; mp[1][j]=0; } } } for(int j=1;j<=m;j++)//向左移动 { if(mp[n][j]==0) { for(int k=j;k>1;k--) { for(int l=1;l<=n;l++) mp[l][k]=mp[l][k-1]; } for(int i=1;i<=n;i++) mp[i][1]=0; } } } printf("%d\n",ans); } return 0; }
ZOJ 3048 (HDU 2258) Continuous Same Game (1),布布扣,bubuko.com
ZOJ 3048 (HDU 2258) Continuous Same Game (1)
标签:des style color os strong io for ar
原文地址:http://blog.csdn.net/u013582254/article/details/38361649