CodeForces 616C The Labyrinth
先预处理出所有连通块,对于每一个*,看他四周的连通块即可
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std; const int maxn=+;
char s[maxn][maxn];
int Map[maxn][maxn];
int n,m;
int dir[][];
int Belong[maxn*maxn];//每个点属于哪个联通快
int tot[maxn*maxn];//每个联通快有几个点
int Block;
int TT;
int tmp[];
int RT[maxn*maxn]; void DFS(int x,int y)
{
Map[x][y]=Block; TT++;
for(int i=;i<;i++)
{
int NewX=x+dir[i][];
int NewY=y+dir[i][];
if(NewX>=&&NewX<=n-)
if(NewY>=&&NewY<=m-)
if(Map[NewX][NewY]==)
DFS(NewX,NewY);
}
} int P(int x,int y)
{
if(x>=&&x<=n-)
if(y>=&&y<=m-)
return ;
return ;
} int main()
{
dir[][]=;dir[][]=;
dir[][]=;dir[][]=;
dir[][]=-;dir[][]=;
dir[][]=;dir[][]=-; scanf("%d%d",&n,&m);
memset(Map,,sizeof Map);
for(int i=;i<n;i++) scanf("%s",s[i]);
Block=;
for(int i=;i<n;i++)
for(int j=;j<m;j++)
{
if(s[i][j]=='*') Map[i][j]=-;
else Map[i][j]=;
} for(int i=;i<n;i++)
for(int j=;j<m;j++)
{
if(Map[i][j]==)
{
TT=;
DFS(i,j);
tot[Block]=TT;
Block++;
}
} for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(s[i][j]=='*')
{
int ans=;
int tmp[],xx=;
if(P(i-,j)) tmp[xx++]=Map[i-][j];
if(P(i+,j)) tmp[xx++]=Map[i+][j];
if(P(i,j-)) tmp[xx++]=Map[i][j-];
if(P(i,j+)) tmp[xx++]=Map[i][j+];
for(int r=;r<xx;r++)
{
int fail=;
for(int d=;d<r;d++) if(tmp[r]==tmp[d]) fail=;
if(!fail) ans=ans+tot[tmp[r]];
}
ans++;
ans=ans%;
s[i][j]=ans+'';
}
}
} for(int i=;i<n;i++) printf("%s\n",s[i]);
return ;
}
CodeForces 616C The Labyrinth的更多相关文章
- CodeForces - 616C(很有意思的bfs,set,map的使用)
传送门: http://codeforces.com/problemset/problem/616/C C. The Labyrinth time limit per test 1 second me ...
- [Codeforces Round #516][Codeforces 1063B/1064D. Labyrinth]
题目链接:1063B - Labyrinth/1064D - Labyrinth 题目大意:给定一个\(n\times m\)的图,有若干个点不能走,上下走无限制,向左和向右走的次数分别被限制为\(x ...
- Codeforces 1064 D - Labyrinth
D - Labyrinth 对于位置(i,j), j - c = R - L = const(常数), 其中R表示往右走了几步,L表示往左走了几步 所以R越大, L就越大, R越小, L就越小, 所以 ...
- Codeforces 1064D/1063B Labyrinth
原题链接/原题链接(代理站) 题目翻译 给你一个\(n*m\)的迷宫和起始点,有障碍的地方不能走,同时最多向左走\(x\)次,向右走\(y\)次,向上向下没有限制,问你有多少个格子是可以到达的. 输入 ...
- [ CodeForces 1063 B ] Labyrinth
\(\\\) \(Description\) 给出一个四联通的\(N\times M\) 网格图和起点.图中有一些位置是障碍物. 现在上下移动步数不限,向左至多走 \(a\) 步,向右至多走 \(b\ ...
- 【Codeforces 1063B】Labyrinth
[链接] 我是链接,点我呀:) [题意] 你可以往左最多x次,往右最多y次 问你从x,y出发最多能到达多少个格子 只能往上下左右四个方向走到没有障碍的格子 [题解] 假设我们从(r,c)出发想要到固定 ...
- Educational Codeforces Round 5
616A - Comparing Two Long Integers 20171121 直接暴力莽就好了...没什么好说的 #include<stdlib.h> #include&l ...
- CSU-ACM2018暑假集训6—BFS
可以吃饭啦!!! A:连通块 ZOJ 1709 Oil Deposits(dfs,连通块个数) B:素数变换 打表+bfs POJ 3216 Prime Path(打表+bfs) C:水bfs HDU ...
- Codeforces Educational Codeforces Round 5 C. The Labyrinth 带权并查集
C. The Labyrinth 题目连接: http://www.codeforces.com/contest/616/problem/C Description You are given a r ...
随机推荐
- 查询MySQL中某个数据库中有多少张表
SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES WHERE table_schema = '数据库' GRO ...
- Linux添加用户user到用户组group
添加用户:useradd niot 添加到组:usermod -a -G root niot 改密码:passwd niot 切换:su - niot 查看用户组:groups 将一个用户添加到用户组 ...
- 理解Java String和String Pool
本文转载自: http://blog.sina.com.cn/s/blog_5203f6ce0100tiux.html 要理解 java中String的运作方式,必须明确一点:String是一个非可变 ...
- and的用法(&)
经常看到jq的源码中各种&连接在一起赋值一个变量, 例一: var b = a&&a.getName 例二: var b = a&&a.getName||d 例 ...
- c++11 右值引用、move、完美转发forward<T>
#include <iostream> #include <string> using namespace std; template <typename T> v ...
- Memcached 缓存服务器介绍
1.memcached 高性能分布式内存对象缓存系统 2.目的:减轻数据库负载,提高基于动态数据库驱动网站的响应速度 3.数据格式:文本行 4.协议:memcache协议 5.存储方式:hashMa ...
- 字符串查找 cmd find命令
find /i "ora-" *.log 我对findstr是如此的依赖,以至于当我向各位讲解find命令的时候,我还得老老实实地在cmd窗口中敲下 find /? 这条命令,然后 ...
- 【素数】 poj 2739 一个数能有多少种连续素数相加方案
简单题 素数打表 根据数据量 用n2算法遍历 开一个save[k]素数存前k个素数和即可. #include <iostream> #include <cstdio> ...
- UIWebView 使用要注意的几点
UIWebView 使用要注意的几点 最近有客户希望将移动端统一使用HTML5来完成,在iOS端就要用到UIWebView.遇到了以下三个主要问题: 加载HTTPS页面 不像Safari可以弹出弹框问 ...
- PAT (Advanced Level) 1111. Online Map (30)
预处理出最短路再进行暴力dfs求答案会比较好.直接dfs效率太低. #include<cstdio> #include<cstring> #include<cmath&g ...