浙江理工2015.12校赛-F Landlocked
Landlocked
Time Limit: 5 Sec Memory Limit: 128 MB
Submit: 288 Solved: 39
Description
Canada is not a landlocked country: the country touches at least one ocean (in fact, it touches three).
There are 46 countries (including Bolivia and Mongolia, for example) which are landlocked. That is, they do not touch an ocean, but by going through one other country, an ocean can be reached. For example, a person in Mongolia can get to an ocean by passing through Russia.
Liechtenstein and Uzbekistan are the only two countries in the world which are land-landlocked. That is, not only are they land-locked, but all countries which surround these two countries are land-locked countries. Thus, one would have to pass through at least two different countries when leaving Uzbekistan before arriving at an ocean.
Your task is to determine how landlocked each country is on a given map. We say that a country is not landlocked (recorded as 0) if it touches water in any adjacent cell in either a horizontal, vertical, or diagonal direction. If a country is landlocked, you must calculate the minimum number of borders that one must cross in order to travel from the country to water. Each step of such a journey must be to a cell that is adjacent in either a horizontal, vertical, or diagonal direction. Crossing a border is defined as taking a step from a cell in one country to an adjacent cell in a different country.
Note that countries may not be connected to themselves (as in a country formed of islands). In this case, the landlocked value for the country is the minimal of each connected region of the country.
Input
The first line contains N and M (1 ≤ N, M ≤ 1000).
On each of the next N lines, there are M capital letters. Each country will be represented by a unique letter, with the exception that the letter W is reserved to indicate the water in the oceans or seas that will be used to determine the how landlocked each country is.
Output
The output consists of the country letter followed by a space, followed by the landlockedness for that particular country. Output should be in alphabetical order
Sample Input
7 10
WWWWWCCDEW
WWWWCCEEEW
WTWWWCCCCW
WWFFFFFFWW
WWFAAAAFWW
WWFABCAFFW
WWFAAAAFWW
Sample Output
A 1
B 2
C 0
D 1
E 0
F 0
T 0
采用从外到内的方式,由海洋到城市,进行BFS搜索,相同的城市进行DFS搜索。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <algorithm>
#define LL long long
using namespace std;
const int INF = 0x3f3f3f3f;
int Dir[][2]={{1, 0}, {-1, 0}, {0, 1}, {0, -1}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}};
typedef struct node
{
int x,y,dis;
}Node;
char str[1100][1100];
bool vis[1100][1100];
int dis[1100][1100];
int Dis[300];
int n,m;
queue<Node>Q;
bool Ok(int x,int y)
{
if(x>=0&&x<n&&y>=0&&y<m&&!vis[x][y])
{
return true;
}
return false;
}
void dfs(int x,int y,int num)
{
int Fx,Fy;
Node s;
// printf("%d %d\n",x,y);
for(int i=0;i<8;i++)
{
Fx=x+Dir[i][0];
Fy=y+Dir[i][1];
if(Ok(Fx,Fy))
{
if(str[Fx][Fy]==str[x][y])
{
vis[x][y]=true;
s.x=Fx;
s.y=Fy;
s.dis=num;
Q.push(s);
dfs(Fx,Fy,num);
}
}
}
}
void bfs(int x,int y,int num)
{
dis[x][y]=num;
int Fx,Fy;
Node s;
for(int i=0;i<8;i++)
{
Fx=x+Dir[i][0];
Fy=y+Dir[i][1];
if(Ok(Fx,Fy))
{
vis[Fx][Fy]=true;
if(str[Fx][Fy]!=str[x][y])
{
s.x=Fx;
s.y=Fy;
s.dis=num+1;
Q.push(s);
dfs(Fx,Fy,num+1);
}
}
}
}
int main()
{
Node s;
while(~scanf("%d %d",&n,&m))
{
for(int i=0;i<n;i++)
{
scanf("%s",str[i]);
}
memset(vis,false,sizeof(vis));
memset(dis,INF,sizeof(dis));
memset(Dis,INF,sizeof(Dis));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(str[i][j]=='W')
{
vis[i][j]=true;
bfs(i,j,-1);
}
}
}
while(!Q.empty())
{
s=Q.front();
Q.pop();
bfs(s.x,s.y,s.dis);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(str[i][j]!='W')
Dis[(int)str[i][j]]=min(Dis[(int)str[i][j]],dis[i][j]);
}
}
for(int i=0;i<300;i++)
{
if(Dis[i]!=INF)
{
printf("%c %d\n",i,Dis[i]);
}
}
}
return 0;
}
浙江理工2015.12校赛-F Landlocked的更多相关文章
- 浙江理工2015.12校赛-A
孙壕请一盘青岛大虾呗 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 577 Solved: 244 Description 话说那一年zstu与gdut ...
- 浙江理工2015.12校赛-G Jug Hard
Jug Hard Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1172 Solved: 180 Description You have two e ...
- 浙江理工2015.12校赛-B 七龙珠
七龙珠 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 781 Solved: 329 Description 话说孙壕请吃了青岛大虾后,一下子变穷了,就 ...
- 校赛F
问题描述 例如对于数列[1 2 3 4 5 6],排序后变为[6 1 5 2 4 3].换句话说,对于一个有序递增的序列a1, a2, a3, ……, an,排序后为an, a1, an-1, a2, ...
- 2015 GDUT校赛
周末打了个GDUT的校赛,也是作为SCAU的一场个人排位. 比赛中竟然卡了个特判,1个半钟就切了5条了,然后一直卡. 还有其他两条可以做的题也没法做了,性格太执着对ACM来说也是错呀. 讲回正题 . ...
- 校赛F 比比谁更快(线段树)
http://acm.cug.edu.cn/JudgeOnline/problem.php?cid=1153&pid=5 题意:给你一个字符串,各两个操作: ch=0,[l,r]降序 ch=1 ...
- 2017年浙江理工大学程序设计竞赛校赛 题解&源码(A.水, D. 简单贪心 ,E.数论,I 暴力)
Problem A: 回文 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1719 Solved: 528 Description 小王想知道一个字 ...
- 线性期望(BUPT2015校赛.F)
将整体期望分成部分期望来做. F. network 时间限制 3000 ms 内存限制 65536 KB 题目描述 A social network is a social structure mad ...
- 2015 多校赛 第三场 1002 (hdu 5317)
Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He wants to find more and more i ...
随机推荐
- HTML静态网页 Window.document对象
一.找到元素: docunment.getElementById("id"):根据id找,最多找一个: var a =docunment.getElementById(&qu ...
- 队列的C++实现(数组)——创建-进队-出队-返回队首元素-清空队列栈-处理队列
队列的数组实现,从队尾进入,对头删除. 队列长度用标志变量size,它是独立于front和rear的一个变量.size == 0,队列为空.size == capacity,满队列. 一.结点声明 s ...
- BizTalk开发系列(二十五) SQL Adapter
SQL Server 是.NET开发的首选数据库.当然开发BizTalk应用程序很多也离不了SQL Server.针对SQL Server的数据操作BizTalk 提供了SQL Adapter作为与数 ...
- Android课程---第一课
Android是一种基于Linux的开源的操作系统 主要使用于智能设备,如智能手机.平板电脑和智能电视等 由Google公司领头开发并推广,2008年推出第一个版本. 此系统最初由”安卓之父" ...
- 【iCore3 双核心板_ uC/OS-III】例程七:信号量——任务同步
实验指导书及代码包下载: http://pan.baidu.com/s/1kVjeN2n iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- Apache Spark技术实战之5 -- SparkR的安装及使用
欢迎转载,转载请注明出处,徽沪一郎. 概要 根据论坛上的信息,在Sparkrelease计划中,在Spark 1.3中有将SparkR纳入到发行版的可能.本文就提前展示一下如何安装及使用SparkR. ...
- JavaScript显示当前时间的代码
方法一: <script type="text/javascript"> function startTime() { //获取当前系统日期 var today=new ...
- 一个php的爬虫,将笔趣阁的书可以都下载下来。
数据库:book 表id ---- 数据库: `book`-- -- -------------------------------------------------------- ---- 表的结 ...
- MySQL中文全文检索
一.概述 MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度. 二.语法 MATCH (col1,col2,...) AGAINS ...
- How to prevent SQL injection attacks?
In our earlier tutorial on SQL Injection, one way to have prevented the SQL injection attack was by ...