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 ...
随机推荐
- Ajax的简单实现(Json)
之前写的是一般的Ajax if (request.status === 200) { document.getElementById("createResult").innerHT ...
- Hadoop spark mongo复制集
启动hadoop cd /usr/local/hadoop/hadoop $hadoop namenode -format # 启动前格式化namenode $./sbin/start-all.sh ...
- 关于在PHP中当一个请求未完成时,再发起另一个请求被阻塞的问题
最近做项目的时候遇到个问题,就是做阿里云oss大文件上传进度条显示,因为要实时查询上传分片进度,所以在上传的同时必须要再发起查询的请求,但是一直都是所有分片上传完成后查询的请求才执行,刚开始以为是阿里 ...
- java反射机制与动态加载类
什么是java反射机制? 1.当程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言.我们认为java并不是动态语言,但是它却有一个非常突出的动态相关机制,俗称:反射. IT行业里这么说,没有 ...
- vue弹窗插件实战
vue做移动端经常碰到弹窗的需求, 这里写一个功能简单的vue弹窗 popup.vue <template> <div class="popup-wrapper" ...
- SpringBoot发送简单文本邮件
1.pom.xml添加 spring-boot-starter-mail 依赖 <dependency> <groupId>org.springframework.boot&l ...
- fuse的mount机制-流程及参数
在bbfs中,传递的参数有两个目录,fuse将一个目录挂载在另一个目录下. 在ssfs中,传递的参数只有一个目录(传递两个目录fuse会出错). 问题:那么fuse的mount机制到底需要几个目录参数 ...
- netty codec部分剖析
针对netty 3.2进行剖析 今天用到了netty的encoder和decoder(coder其本质还是handler),特剖析一个netty提供的coder,从而选择或者实现我自己的coder. ...
- 并不对劲的bzoj5415:loj2718:uoj393:p4768:[NOI2018]归程
题目大意 \(n\)(\(n\leq2*10^5\))个点,\(m\)(\(m\leq4*10^5\))条边的图,每条边有海拔\(a_i(a_i\leq10^9)\).长度\(l_i(l_i\leq1 ...
- 【JSOI 2009】 Count
[题目链接] 点击打开链接 [算法] 二维树状数组 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 300 # ...