标签: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