BFS 2015百度之星初赛2 HDOJ 5254 棋盘占领
/*
BFS:先把1的入队,每个1和它相邻的组合后看看能不能使0变1,若有则添加入队,change函数返回改变了多少个0
注意:结果还要加上原来占领的
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#include <set>
using namespace std; const int MAXN = 5e2 + ;
const int INF = 0x3f3f3f3f;
int a[MAXN][MAXN];
int dx[] = {-, -, , };
int dy[] = {-, , -, };
int n, m;
queue<pair<int, int> > Q; int change(int x, int y)
{ int cnt = ;
for (int i=; i<; ++i)
{
int tx = x + dx[i]; int ty = y + dy[i];
if (tx < || tx > n) continue;
if (ty < || ty > m) continue;
if (a[tx][ty] == )
{
if (i == || i == )
{
if (a[tx][ty+] == ) {a[tx][ty+] = ; ++cnt; Q.push (make_pair (tx, ty+));}
if (a[x][y-] == ) {a[x][y-] = ; ++cnt; Q.push (make_pair (x, y-));}
}
else if (i == || i == )
{
if (a[tx][ty-] == ) {a[tx][ty-] = ; ++cnt; Q.push (make_pair (tx, ty-));}
if (a[x][y+] == ) {a[x][y+] = ; ++cnt; Q.push (make_pair (x, y+));}
}
}
} return cnt;
} int BFS(void)
{
int ans = ;
while (!Q.empty ())
{
int x = Q.front ().first; int y = Q.front ().second; Q.pop ();
ans += change (x, y);
} return ans;
} int main(void) //2015百度之星初赛2 HDOJ 5254 棋盘占领
{
int t, cas = ; scanf ("%d", &t);
while (t--)
{
while (!Q.empty ()) Q.pop ();
scanf ("%d%d", &n, &m);
memset (a, , sizeof (a)); int g; scanf ("%d", &g);
int cnt = ;
while (g--)
{
int x, y; scanf ("%d%d", &x, &y);
if (a[x][y] == )
{
cnt++; a[x][y] = ; Q.push (make_pair (x, y));
}
} printf ("Case #%d:\n", ++cas);
printf ("%d\n", BFS () + cnt);
} return ;
} /*
4
2 2
2
1 1
2 2
3 3
3
1 1
2 3
3 2
2 4
5
1 1
1 1
1 2
1 3
1 4
2 4
2
1 1
2 4
*/
BFS 2015百度之星初赛2 HDOJ 5254 棋盘占领的更多相关文章
- 数学 2015百度之星初赛2 HDOJ 5255 魔法因子
题目传送门 /* 数学:不会写,学习一下这种解题方式:) 思路:设符合条件的数的最高位是h,最低位是l,中间不变的部分为mid,由题意可得到下面的公式(这里对X乘上1e6用a表示,b表示1e6) (h ...
- LIS 2015百度之星初赛2 HDOJ 5256 序列变换
题目传送门 题意:中文题面 分析:LIS(非严格):首先我想到了LIS,然而总觉得有点不对:每个数先减去它的下标,防止下面的情况发生:(转载)加入序列是1,2,2,2,3,这样求上升子序列是3,也就是 ...
- Kruskal 2015百度之星初赛2 HDOJ 5253 连接的管道
题目传送门 /* 最小生成树(Kruskal):以权值为头,带入两个端点,自然的排序;感觉结构体的并查集很好看 注意:题目老头要的是两个农田的高度差,中文水平不好,题意理解成和平均值的高度差! */ ...
- 二分搜索 2015百度之星初赛1 HDOJ 5248 序列变换
题目传送门 /* 二分搜索:在0-1e6的范围找到最小的max (ai - bi),也就是使得p + 1 <= a[i] + c or a[i] - c 比赛时以为是贪心,榨干智商也想不出来:( ...
- 二分查找 2015百度之星初赛1 HDOJ 5246 超级赛亚ACMer
题目传送门 /* 二分找到不大于m的最大的数,记做p,只要a[p] + k <= a[p+1]就继续 注意:特判一下当没有比m小的数的情况:) */ #include <cstdio> ...
- 2015百度之星初赛2 1005 序列变换(LIS变形)
LIS(非严格):首先我想到了LIS.然而总认为有点不正确:每一个数先减去它的下标.防止以下的情况发生:(转载) 3 增加序列是1,2,2,2,3,这样求上升子序列是3.也就是要改动2个,可是中间的两 ...
- 2016百度之星 初赛2A ABEF
只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...
- HDU 5690:2016"百度之星" - 初赛 All X
原文链接:https://www.dreamwings.cn/hdu5690/2657.html All X Time Limit: 2000/1000 MS (Java/Others) Mem ...
- 2016"百度之星" - 初赛(Astar Round2A)HDU 5695 拓扑排序+优先队列
Gym Class Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
随机推荐
- Hibernate exception
1.a different object with the same identifier value was already associated with the session. 错误原因:在h ...
- Delphi如何实现多国语言
Delphi里的多语言处理方法都一样, 都是通过资源DLL的形式进行加载处理. Delphi在加载form数据的时候会判断当前的系统语言,然后根据语言加载不同的资源dll, 来实现多国语言的功能. 下 ...
- C# 给窗体添加事件
1.https://zhidao.baidu.com/question/588485101.html
- mysql数据库引擎InnoDB和MyISAM的区别
InnoDB支持行级锁和表级锁(默认行级锁),支持事务,外部键等:大量的insert和update更快等.只有通过索引条件检索数据,InnoDB 才使用行级锁,否则,InnoDB 将使用表锁. MyI ...
- 基于Delphi7 WebService 在Apache发布及Apache使用说明
基于Delphi7 WebService 在Apache 发布及Apache 使用说明 qq:394251165 前段时间,需要将基于Delphi7 WebService 发布在Apache, 很是苦 ...
- Android源代码下载过程中无法下载repo的解决方法【转】
本文转载自:http://blog.csdn.net/shangyuan21/article/details/17618575 我们都知道下载Android源代码需要使用repo进行辅助下载,但是最进 ...
- 书写优雅的shell脚本(六)- shell中的命令组合(&&、||、())
shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中.当 $? == 0 时,表示执行成功:当 $? == 1 时,表示执行失败. 有时候,下一条命令依赖前 ...
- Vim Vundle YouCompleteMe
/************************************************************************************** * Vim Vundle ...
- SPOJ:Help BTW(二分)
BTW wants to buy a gift for her BF and plans to buy an integer array. Generally Integer arrays are c ...
- [Selenium] 测试机器上安装了多个Firefox,如何指定运行哪一个?
可通过FirefoxBinary 来指定运行某个路径下的Firefox, 示例代码如下: public class testFirefoxBinary{ public static void main ...