【HDOJ】3295 An interesting mobile game
其实就是一道搜索模拟题。因为数据量小,用char就够了。
/* 3295 */
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
using namespace std; typedef struct {
char m[][];
char x, y;
char s, c;
} node_t; typedef struct subNode_t {
char x, y;
subNode_t() {}
subNode_t(char xx, char yy) {
x = xx; y = yy;
}
} subNode_t; bool visit[][];
node_t beg, cur;
int n, m, cnt;
char dir[][] = {
-,,,-,,,,
};
queue<node_t> Q;
queue<subNode_t> q; inline bool check(char x, char y) {
return x< || x>=n || y< || y>=m;
} void remove(char x, char y, char cl) {
char i, j, k;
subNode_t nd; ++cur.s;
cur.m[x][y] = ;
visit[x][y] = true;
--cur.c;
q.push(subNode_t(x, y)); while (!q.empty()) {
nd = q.front();
q.pop();
for (i=; i<; ++i) {
x = nd.x + dir[i][];
y = nd.y + dir[i][];
if (check(x, y) || visit[x][y])
continue;
if (cur.m[x][y] == cl) {
cur.m[x][y] = ;
visit[x][y] = true;
--cur.c;
q.push(subNode_t(x, y));
}
}
}
} node_t shift() {
char i, j, k, r;
bool flag;
node_t nd; // copy from cur
nd.s = cur.s;
nd.c = cur.c;
nd.x = cur.x;
nd.y = cur.y;
memset(nd.m, , sizeof(nd.m)); // fall down
r = ;
for (j=; j<m; ++j) {
k = n-;
for (i=n-; i>=; --i)
if (cur.m[i][j])
nd.m[k--][r] = cur.m[i][j];
if (k < n-)
++r;
} return nd;
} char bfs() {
char i, j, k;
node_t nd; while (!Q.empty())
Q.pop(); memset(visit, false, sizeof(visit));
for (i=; i<n; ++i) {
for (j=; j<n; ++j) {
if (beg.m[i][j] && !visit[i][j]) {
cur = beg;
remove(i, j, beg.m[i][j]);
nd = shift();
Q.push(nd);
}
}
} while (!Q.empty()) {
beg = Q.front();
Q.pop();
if (beg.c == )
return beg.s;
memset(visit, false, sizeof(visit));
for (i=; i<n; ++i) {
for (j=; j<m; ++j) {
if (beg.m[i][j] && !visit[i][j]) {
cur = beg;
remove(i, j, beg.m[i][j]);
nd = shift();
Q.push(nd);
}
}
}
} return ;
} int main() {
int i, j, k; #ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
#endif while (scanf("%d%d",&n,&m) != EOF) {
cnt = ;
beg.s = ;
for (i=; i<n; ++i) {
for (j=; j<m; ++j) {
scanf("%d", &k);
beg.m[i][j] = k;
if (k)
++cnt;
}
}
beg.c = cnt;
k = bfs();
printf("%d\n", k);
} return ;
}
【HDOJ】3295 An interesting mobile game的更多相关文章
- 【二分】Codeforces 706B Interesting drink
题目链接: http://codeforces.com/problemset/problem/706/B 题目大意: n (1 ≤ n ≤ 100 000)个商店卖一个东西,每个商店的价格Ai,你有m ...
- 【原创】小白学jquery Mobile《构建跨平台APP:jQuery Mobile移动应用实战》连载五(给按钮加图标)
在范例5-4所使用的导航栏中,已经为按钮加入了图标的样式,但是当时并没有介绍按钮的图标究竟是怎么一回事.下面截取范例5-4中导航栏部分的代码: <divdata-role="foote ...
- 【HDOJ】4729 An Easy Problem for Elfness
其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...
- 【HDOJ】【3506】Monkey Party
DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...
- 【HDOJ】【3516】Tree Construction
DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...
- 【HDOJ】【3480】Division
DP/四边形不等式 要求将一个可重集S分成M个子集,求子集的极差的平方和最小是多少…… 首先我们先将这N个数排序,容易想到每个自己都对应着这个有序数组中的一段……而不会是互相穿插着= =因为交换一下明 ...
- 【HDOJ】【2829】Lawrence
DP/四边形不等式 做过POJ 1739 邮局那道题后就很容易写出动规方程: dp[i][j]=min{dp[i-1][k]+w[k+1][j]}(表示前 j 个点分成 i 块的最小代价) $w(l, ...
- 【HDOJ】【3415】Max Sum of Max-K-sub-sequence
DP/单调队列优化 呃……环形链求最大k子段和. 首先拆环为链求前缀和…… 然后单调队列吧<_<,裸题没啥好说的…… WA:为毛手写队列就会挂,必须用STL的deque?(写挂自己弱……s ...
- 【HDOJ】【3530】Subsequence
DP/单调队列优化 题解:http://www.cnblogs.com/yymore/archive/2011/06/22/2087553.html 引用: 首先我们要明确几件事情 1.假设我们现在知 ...
随机推荐
- HTML及简单标签介绍
什么是HTML: HTML 语言是一种超文本的标记语言,简单来讲就是构建一套标记符号和语法规则,将所要显示出来的文字.图象.声音等要素按照一定的标准要求排放,形成一定的标题.段落.列表等单元. 标签 ...
- Python之路【第十四篇】:AngularJS --暂无内容-待更新
Python之路[第十四篇]:AngularJS --暂无内容-待更新
- Ant配置
首先去官网下载一个ant的文件 http://ant.apache.org/bindownload.cgi
- Android Activity各启动模式的差异
Activity共有四种启动模式:standard,singleTop,singleTask,singleInstance 为了方便描述和理解,布局文件.Manifest文件和各个java文件如下: ...
- Linux下的CPU使用率与服务器负载的关系与区别
原文链接:http://blogread.cn/it/article/7444 当我们使用top命令查看系统的资源使用情况时会看到load average,如下图所示,它表示系统在1,5,15分钟的平 ...
- 在ASP中调用DLL的方法
.net的dll已经不是严格意义上的动态连接库了,而是一个类或者类库.它是不能直接在ASP.VB等其它的应用环境中使用的. 我们可以通过COM包装器(COM callable wrapper (C ...
- PropertyPlaceholderConfigurer的用法(使用spring提供的类读取数据库配置信息.properties)
http://www.cnblogs.com/wanggd/archive/2013/07/04/3172042.html(写的很好)
- awr相关指标解析
awr相关指标解析 2016年11月11日 15:09
- 玩转CSLA.NET小技巧系列一:跳转页面丢失session,如何解决
很少写代码,最近在写代码被登录难倒了,这丫的一直在跟我较劲 每次登录完跳转到首页后还是未登录状态 if (ModelState.IsValid) { bool isSuccess = FI.Finan ...
- PHP算法 《树形结构》 之 伸展树(1) - 基本概念
伸展树的介绍 1.出处:http://dongxicheng.org/structure/splay-tree/ A. 概述 二叉查找树(Binary Search Tree,也叫二叉排序树,即Bin ...