牛客练习赛31A 地、颜色、魔法(搜索+二维数组一维表示)
红色来源于山脉,象征着狂躁、愤怒、混乱,血雨腥风,电光火石。
蓝色来源于海岛,象征着控制、幻觉、诡计,运筹帷幄,谋定后动。
绿色来源于树林,象征着生命、蛮力、成长,横冲直撞,生生不息。
黑色来源于沼泽,象征着死亡、贪婪、腐败,追求卓越,不计代价。
白色来源于平原,象征着秩序、公平、正义,携手共进,稳中求胜。
1. 这个位置被打上了标记。
2. 这个位置在不经过被打标记的位置的情况下与边界不连通(这个图是四联通的)。换句话说,如果你从这个位置开始,在不经过被打标记的位置,且只能向上下左右四个方向移动的情况下永远不能走到地图的边界,那么这个位置符合条件。
现在,你的好基友想知道,你能为多少个位置赋予你自己的颜色呢?
输入描述:
第一行包含两个正整数 n, m ,表示地图的长和宽。
接下去 n 行,每行一个长为 m 的字符串,表示地图的一行。
其中
表示该位置未被打标记;
表示该位置被打了标记。
保证地图仅由
和
构成。
输出描述:
输出仅一行,包含一个整数,表示你的答案。
输入例子:
4 4
....
.###
.#.#
.###
输出例子:
9
-->
备注:
1 ≤ n x m ≤ 10
6
题目大意:
给你一块地图,n行m列,问你因为打上标记而不能和外界联通的点有多少个。
签到题啊。从边界搜索就行了。
唯一要注意的就是数组大小比较秀。1<=n*m<=10^6。
开个10^6*10^6的数组是会直接爆掉的。可是由于要写dfs函数,数组还只能定义成全局的。
直接定义成char s[1000005]就好啦。s[i][j]等价于s[(i-1)*m+j](地图左上角为(1,1),s从1开始)。
#include <cstdio>
#include <queue>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
typedef long long ll;
const int maxn=; int n,m;
char s[maxn+];
int vis[maxn+];
int tot;
int a[][]={{,},{,-},{,},{-,}}; void dfs(int x,int y)
{
if(vis[(x-)*m+y])
return;
vis[(x-)*m+y]=;
tot++;
for(int i=;i<;i++)
{
int xx=x+a[i][];
int yy=y+a[i][];
if(xx>=&&yy>=&&xx<=n&&yy<=m&&s[(xx-)*m+yy]=='.')
dfs(xx,yy);
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%s",s++(i-)*m);
//printf("%s",s+1);
memset(vis,,sizeof(vis));
tot=;
for(int i=;i<=n;i++)
{
if(i==)
{
for(int j=;j<=m;j++)
{
if(s[(i-)*m+j]=='.')
dfs(i,j);
}
}
if(i>&&i<n)
{
if(s[(i-)*m+]=='.')
dfs(i,);
if(s[(i-)*m+m]=='.')
dfs(i,m);
}
if(i==n)
{
for(int j=;j<=m;j++)
{
if(s[(i-)*m+j]=='.')
dfs(i,j);
}
}
}
printf("%d\n",n*m-tot);
return ;
}
牛客练习赛31A 地、颜色、魔法(搜索+二维数组一维表示)的更多相关文章
- 牛客网-《剑指offer》-二维数组中的查找
题目:http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e C++ class Solution { public: bo ...
- 牛客网第二场Jfarm(随机化+二维前缀和)
链接:https://www.nowcoder.com/acm/contest/140/J 来源:牛客网 White Rabbit has a rectangular farmland of n*m. ...
- 牛客练习赛35-函数的魔法-floyd
函数的魔法 思路 :如果 可以从A到B最终 都会是233范围内的数字进行转换,注意 这里 建图 为单向图 这个运算未必符合交换关系. #include<bits/stdc++.h> us ...
- 牛客练习赛3 F - 监视任务——贪心&&树状数组
题目 链接 $Reki$ 在课余会接受一些民间的鹰眼类委托,即远距离的狙击监视防卫..$Reki$ 一共接收到$m$份委托,这些委托与 $n$ 个直线排布的监视点相关.第 $i$ 份委托的内容为:对于 ...
- 牛客练习赛47 DongDong数颜色 (莫队算法)
链接:https://ac.nowcoder.com/acm/contest/904/E 来源:牛客网 DongDong数颜色 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 5242 ...
- 牛客练习赛47 E DongDong数颜色 (树状数组维护区间元素种类数)
链接:https://ac.nowcoder.com/acm/contest/904/E 来源:牛客网 DongDong数颜色 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 5242 ...
- 牛客练习赛47 E DongDong数颜色 (树上启发式合并)
链接:https://ac.nowcoder.com/acm/contest/904/E 来源:牛客网 DongDong数颜色 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 5242 ...
- 【并查集缩点+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 ...
随机推荐
- aws msk
1. 建立3个私网子网 2. 建立msk
- 【Luogu P3388】割点模板
Luogu P3388 在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多,就称这个点集为割点集合. 如果某个割点集合只含有一个顶点X(也即{X ...
- 【CPLUSOJ】【动态规划】最短回文串
题目链接 [问题描述] 如果一个字符串正过来读和倒过来读是一样的,那么这个字符串就被称作回文串.例如abcdcba,abcddbca就是回文串,而abcdabcd不是. 你要解决的问题是:对于任意一个 ...
- Kibana笔记
• 根据id查询 GET index_1/doc/1 • 全文检索 GET index_1/doc/_search GET index_1/doc/_search{ "query" ...
- Identityserver4中ResourceOwnerPassword 模式获取refreshtoken
一.IS4服务端配置 1.配置Client new Client { ClientId = "xamarin", ClientSecrets = { ".Sha256() ...
- day20190915write from memory
jQuery_Chapter02_20190912/ jQuery操作类样式.html <!DOCTYPE html> <html> <head> <meta ...
- Java标识符(Identifier)(关键字和保留字)
Java标识符(Identifier) 1. 只能由英文字母(A~Z)或(a~z).下划线(_).美元符号($)和数字(0~9)组成,且开头不能为数字. 2. 区分大小写! 3. 无长度限制! _3_ ...
- Djangoday3template
template第一个demo从后台传递数据到前端从后台传递list前端for循环显示内容后台传输dict到前端 template第一个demo template存在app/templates目录下 ...
- LNMP Shell脚本发布
#!/bin/bash # : #This author is DKS #auto install nginx mysql php ################################## ...
- 【java】使用java.util的【Collections】简化List创建
我们在创建一个List并往其中加入一个元素的时候一般会这么做: public List<User> getCurrentUser() { List<User> users = ...