牛客练习赛A 【BFS】
<题目链接>
题目大意:
给出一张图,问你其中 ' # ' 加上那些不能够到达边界的 ' . ' 的点的个数,' # ' 会起阻挡作用。
解题分析:
本题很好做,无非就是将所有能够由边界上 ' . ' 连接到的' . '的数量减去即可。需要注意的是,由于本题只给出n*m(n*m<1e6)的范围,所以需要巧妙的将二维转化为一维,然后进行操作。
#include <cstdio>
#include <cstring>
#include <cctype> //内含isdigit()函数
#include <queue>
#include <algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
typedef pair<int,int>pii; /*template<typename T> //读入优化
inline T read(T&x){
x=0;int f=0;char ch=getchar();
while (ch<'0' || ch>'9') f|=(ch=='-'),ch=getchar();
while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
return x=f?-x:x;
}*/
template<typename T>
inline T read(T&x) {
x = ;int f = ; char ch = getchar();
while(ch<'' || ch>'') { if(ch == '-') f=-; ch=getchar(); }
while(ch>='' && ch<='') { x=x*+ch-''; ch=getchar(); }
return x*f;
}
template<typename T> //输出优化
inline void Print(T X){
if(X<)X=-X,putchar('-');
if(X>)Print(X/);putchar(X%+);
}
/*inline int read(){
int x=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
for(;isdigit(c);c=getchar())x=x*10+c-'0';
return x*f;
}*/
const int N = 1e6+;
int n,m;
inline int id(int x,int y){return (x-)*m+y;} //将二维数组下标转化为一维数组下标
char M[N],s[N];
int vis[N];
queue<pii>Q;
const int mx[]={,,-,};
const int my[]={,,,-};
int main(){
//n=read(),m=read();
read(n);read(m);
rep(i,,n){
scanf("%s",s+);
rep(j,,m)M[id(i,j)]=s[j];
}
rep(i,,n) rep(j,,m) if(i==||i==n||j==||j==m){
if(M[id(i,j)]!='#')Q.push(mp(i,j)),vis[id(i,j)]=; //将边界上的所有点都加入队列,并且标记
}
int ans=n*m;
while(Q.size()){
ans--; //所有能够与边界相连的'.'点都要减去
int x=Q.front().fi,y=Q.front().se;Q.pop();
rep(dir,,){
int nx=x+mx[dir],ny=y+my[dir];
if(nx>=&&nx<=n&&ny>=&&ny<=m&&M[id(nx,ny)]=='.'&&!vis[id(nx,ny)]){
vis[id(nx,ny)]=;
Q.push(mp(nx,ny));
}
}
}
Print(ans);puts("");
}
2018-11-17
牛客练习赛A 【BFS】的更多相关文章
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- 牛客练习赛28-B(线段树,区间更新)
牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的 ...
- 牛客练习赛26:D-xor序列(线性基)
链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...
- [堆+贪心]牛客练习赛40-B
传送门:牛客练习赛40 题面: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费 x_i 的时间,同时完成第 i 个任务的时间不 ...
- 牛客练习赛 29 E 位运算?位运算!(线段树)
题目链接 牛客练习赛29E 对$20$位分别建立线段树.首先$1$和$2$可以合起来搞(左移右移其实是等效的) 用个lazy标记下.转移的时候加个中间变量. $3$和$4$其实就是区间$01$覆盖操 ...
- 牛客练习赛22C Bitset
牛客练习赛22C 一共有 n个数,第 i 个数是 xi xi 可以取 [li , ri] 中任意的一个值. 设 ,求 S 种类数. 感觉二进制真是一个神奇的东西. #include <iost ...
- 牛客练习赛51 **E-数列** (二分,贪心,构造)
牛客练习赛51 E-数列 链接:https://ac.nowcoder.com/acm/contest/1083/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...
随机推荐
- Confluence 6 增加和减少你许可证的用户数
增加你许可证的用户数 如果你使用的用户数超过你许可证允许的用户数的话,你的 Confluence 实例将会变成为只读. 只读的意思是没有用户可以创建和编辑内容,直到你的用户数满足你的许可证需求为止. ...
- AngularJs中,如何在ng-repeat完成之后,执行Js脚本
//ng-repeat生成4个li,生成后再执行自定义方法fn在每个li后加一根横线 <script> var myapp=angular.module('myapp',[]); myap ...
- cf862d 交互式二分
/* 二分搜索出一个01段或10即可 先用n个0确定1的个数num 然后测试区间[l,mid]是否全是0或全是1 如果是,则l=mid,否则r=mid,直到l+1==r 然后再测试l是1还是r是1 如 ...
- trade war
问题 C: trade war 时间限制: 1 Sec 内存限制: 128 MB 题目描述 2018年的春天,特朗普这个不靠谱的的家伙悍然向中国发起了贸易战,贸易战是一场没有赢家的战争,美国向中国商 ...
- jQuery筛选器常用总结
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Error: Java VM internal error:Error Loading javai.dll
因为前几天的JMS测试,第一次写了loadrunner的脚本,感觉路一下子宽了. 知道loadrunner可以使用java写脚本,今天就试了一下,遇到了两个第一次写Java Vuser脚本普遍都会遇到 ...
- MongoDB C#驱动给内嵌list添加数据
Fc fc = new Fc() {}; var temp = Builders<MModel>.Filter.Where(m=>m.id== "882d4d22-ff70 ...
- 20165328 预备作业3 Linux安装及命令
Linux安装及学习 Linux安装遇到的问题: 问题:在我开始安装虚拟机的时候,在安装过程中总会出现初始界面,且无法跳过,陷入死循环. 解决方法:我在网上百度搜索该问题之后得到了答案,第一个界面是要 ...
- docker挂载点泄露问题
本来以为我不会遇到. 结果还是遇到了. 现象为k8s delete pod时,系统一直显示Terminatiing,无论多久都不能正常. 以下两个帖子大概说明了是怎么回事. https://blog. ...
- sharepoint2013 Restore-SPSite 报错,采用数据库还原
PS C:\Users\spadmin> Restore-SPSite http://hz0xw002049:8099 -Path D:\20170731MossSiteSP.bak -Forc ...