xtu summer individual 1 A - An interesting mobile game
An interesting mobile game
This problem will be judged on HDU. Original ID: 3295
64-bit integer IO format: %I64d Java class name: Main
Can you solve it?The following picture show this problem better.

This game is played on a rectangular area.This area is divided into some equal square grid..There are N rows and M columns.For each grid,there may be a colored square block or nothing.
Each grid has a number.
“0” represents this grid have nothing.
“1” represents this grid have a red square block.
“2” represents this grid have a blue square block.
“3” represents this grid have a green square block.
“4” represents this grid have a yellow square block.
1. Each step,when you choose a grid have a colored square block, A group of this block and some connected blocks that are the same color would be removed from the board. no matter how many square blocks are in this group.
2. When a group of blocks is removed, the blocks above those removed ones fall down into the empty space. When an entire column of blocks is removed, all the columns to the right of that column shift to the left to fill the empty columns.
Now give you the number of the row and column and the data of each grid.You should calculate how many steps can make the entire rectangular area have no colored square blocks at least.
Input
Output
Sample Input
5 6
0 0 0 3 4 4
0 1 1 3 3 3
2 2 1 2 3 3
1 1 1 1 3 3
2 2 1 4 4 4
Sample Output
4
Source
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <climits>
#include <algorithm>
#include <cmath>
#include <queue>
#define LL long long
#define INF 0x3f3f3f
using namespace std;
int table[][],r,c,ans,cnt;
const int dir[][] = {,-,,,-,,,};
bool vis[][];
struct node{
int x,y;
};
struct po{
int x,y,c;
};
bool check(int (*t)[]) {
for(int i = r; i ; i--) {
for(int j = ; j <= c; j++)
if(t[i][j]) return false;
}
return true;
}
bool cmp(const po &a,const po &b){
return a.c > b.c;
}
void calc(int (*t)[],int x,int y,const int color){
vis[x][y] = true;
cnt++;
for(int i = ; i < ; i++){
int px = x+dir[i][];
int py =y+dir[i][];
if(!vis[px][py] && t[px][py] == color)
calc(t,px,py,color);
}
}
void cancle(int (*t)[],int x,int y,const int color){
bool vis[][] = {false};
queue<node>q;
vis[x][y] = true;
int i,j,px,py;
t[x][y] = ;
q.push((node){x,y});
while(!q.empty()){
node temp = q.front();
q.pop();
for(i = ; i < ; i++){
px = temp.x+dir[i][];
py = temp.y+dir[i][];//这个地方写成dir[i][0]害我调了很久
if(!vis[px][py] && t[px][py] == color){
vis[px][py] = true;
t[px][py] = ;
q.push((node){px,py});
}
}
}
}
void shift(int (*t)[]){
int i,j,k;
bool isempty[] = {false};
for(j = ; j <= c; j++){
for(i = r-; i; i--){
for(k = i;k < r &&!t[k+][j]&&t[k][j]; k++)
swap(t[k+][j],t[k][j]);
}
if(!t[r][j]) isempty[j] = true;
}
for(j = c-; j; j--){
if(isempty[j]){
for(i = ; i <= r; i++){
for(k = j; k <= c; k++)
t[i][k] = t[i][k+];
}
}
}
}
bool dfs(int (*t)[],int step){
int mp[][],i,j,m = ;
bool flag;
if(check(t) && ans == step) return true;
if(step > ans) return false;
po p[];
memset(vis,false,sizeof(vis));
for(i = r; i; i--){
flag = true;
for(j = ; j <= c; j++){
if(t[i][j]) flag = false;
if(t[i][j] && !vis[i][j]){
cnt = ;
calc(t,i,j,t[i][j]);
p[m++] = (po){i,j,cnt};
}
}
if(flag) break;
}
sort(p,p+m,cmp);
for(i = ; i < m; i++){
memcpy(mp,t,sizeof(mp));
cancle(mp,p[i].x,p[i].y,t[p[i].x][p[i].y]);
shift(mp);
if(dfs(mp,step+)) return true;
}
return false;
}
int main() {
int i,j;
while(~scanf("%d %d",&r,&c)) {
memset(table,,sizeof(table));
for(i = ; i <= r; i++)
for(j = ; j <= c; j++)
scanf("%d",table[i]+j);
if(check(table)) {puts("");continue;}
for(ans = ;; ans++)
if(dfs(table,)) break;
printf("%d\n",ans);
}
return ;
}
xtu summer individual 1 A - An interesting mobile game的更多相关文章
- HDU-3295-An interesting mobile game(BFS+DFS)
Problem Description XQ,one of the three Sailormoon girls,is usually playing mobile games on the clas ...
- 【HDOJ】3295 An interesting mobile game
其实就是一道搜索模拟题.因为数据量小,用char就够了. /* 3295 */ #include <iostream> #include <cstdio> #include & ...
- xtu summer individual 4 C - Dancing Lessons
Dancing Lessons Time Limit: 5000ms Memory Limit: 262144KB This problem will be judged on CodeForces. ...
- xtu summer individual 3 C.Infinite Maze
B. Infinite Maze time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- xtu summer individual 2 E - Double Profiles
Double Profiles Time Limit: 3000ms Memory Limit: 262144KB This problem will be judged on CodeForces. ...
- xtu summer individual 2 C - Hometask
Hometask Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces. Origin ...
- xtu summer individual 2 D - Colliders
Colliders Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces. Origi ...
- xtu summer individual 1 C - Design the city
C - Design the city Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu D ...
- xtu summer individual 1 E - Palindromic Numbers
E - Palindromic Numbers Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %l ...
随机推荐
- iOS7改变状态栏文字颜色
1在Info.plist中设置UIViewControllerBasedStatusBarAppearance 为NO2 在需要改变状态栏颜色的 AppDelegate中在 didFinishLaun ...
- 144 Binary Tree Preorder Traversal 二叉树的前序遍历
给定一棵二叉树,返回其节点值的前序遍历.例如:给定二叉树[1,null,2,3], 1 \ 2 / 3返回 [1,2,3].注意: 递归方法很简单,你可以使用迭代方法来解决 ...
- Vue nextTick 理解
官网解释: 将回调延迟到下次 DOM 更新循环之后执行.在修改数据之后立即使用它,然后等待 DOM 更新.它跟全局方法 Vue.nextTick 一样,不同的是回调的 this 自动绑定到调用它的实例 ...
- IIS伪静态失效
故障描述: 今天有个美国VPS的用户向我们救助,说他的网站昨晚还好好的,早上起来就发现404了,但是后台却可以正常登陆.经过我们检查后发现原来是伪静态失效了,查看日志,发现许多ISAPI_Rewrit ...
- AJPFX关于Set接口学习笔记及总结
Set接口中的方法和Collection中方法一致的.Set接口取出方式只有一种,迭代器. |--HashSet:底层数据结构是哈希表,线程是不同步的.无序,高效: HashSet集合保证元素唯一性: ...
- List<DTO>转 Map<String,List<DTO>> 两种写法
List<TeamScheduleDTO> list = JSON.parseArray(response.getData().getJSONArray("list") ...
- logging日志过滤和日志文件自动截取
1.日志过滤 import logging class IgnoreFilter(logging.Filter): def filter(self,record): return "girl ...
- (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
http://blog.csdn.net/yerenyuan_pku/article/details/52888808 前面我们已经集成了Spring4.2.5+Hibernate4.3.11这两个框 ...
- html自己写响应式布局(说起来很高大上的样子,但是其实很简单)
第一步,打开电脑中安装的Sublime Text3,新建demo文件夹用来存放文件,在里面新建一个HTML文件,通过Tab快捷键迅速创建一个HTML模板,并命名标题. 第二步,在Body标签里添加三个 ...
- Linux之用户权限管理
chmod(更改目录或文件权限) 在linux中,文件的权限分为3中,拥有者,群组,其他人.而chmod则是对权限更改的命令. u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个组,o 表示其 ...