codeforces 598D - Igor In the Museum
2016-03-08 13:58
447 查看
D. Igor In the Museum
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Igor is in the museum and he wants to see as many pictures as possible.
Museum can be represented as a rectangular field of n × m cells. Each cell is either empty or impassable. Empty cells are
marked with '.', impassable cells are marked with '*'.
Every two adjacent cells of different types (one empty and one impassable) are divided by a wall containing one picture.
At the beginning Igor is in some empty cell. At every moment he can move to any empty cell that share a side with the current one.
For several starting positions you should calculate the maximum number of pictures that Igor can see. Igor is able to see the picture only if he is in the cell adjacent to the wall with this picture. Igor have a lot of time, so he will examine every picture
he can see.
Input
First line of the input contains three integers n, m and k (3 ≤ n, m ≤ 1000, 1 ≤ k ≤ min(n·m, 100 000)) —
the museum dimensions and the number of starting positions to process.
Each of the next n lines contains m symbols
'.', '*' — the description of the museum. It is guaranteed
that all border cells are impassable, so Igor can't go out from the museum.
Each of the last k lines contains two integers x and y (1 ≤ x ≤ n, 1 ≤ y ≤ m) —
the row and the column of one of Igor's starting positions respectively. Rows are numbered from top to bottom, columns — from left to right. It is guaranteed that all starting positions are empty cells.
Output
Print k integers — the maximum number of pictures, that Igor can see if he starts in corresponding position.
Examples
input
output
input
output
8
这是一般的搜索题,当你发现超时的时候,你就少了一个优化,可以把连接起来的'.',标记为一个区域,这样下次再碰到这个区域的点时,可以直接输出,避免再次
搜索而浪费时间,注意num[]数组开的大小,我前面是num[1100],后来才明白,如果n=1000,m=1000; 那么区域的个数就不是1100那么少了,这个要注意,我就
是后来才发现的。。。。。。
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Igor is in the museum and he wants to see as many pictures as possible.
Museum can be represented as a rectangular field of n × m cells. Each cell is either empty or impassable. Empty cells are
marked with '.', impassable cells are marked with '*'.
Every two adjacent cells of different types (one empty and one impassable) are divided by a wall containing one picture.
At the beginning Igor is in some empty cell. At every moment he can move to any empty cell that share a side with the current one.
For several starting positions you should calculate the maximum number of pictures that Igor can see. Igor is able to see the picture only if he is in the cell adjacent to the wall with this picture. Igor have a lot of time, so he will examine every picture
he can see.
Input
First line of the input contains three integers n, m and k (3 ≤ n, m ≤ 1000, 1 ≤ k ≤ min(n·m, 100 000)) —
the museum dimensions and the number of starting positions to process.
Each of the next n lines contains m symbols
'.', '*' — the description of the museum. It is guaranteed
that all border cells are impassable, so Igor can't go out from the museum.
Each of the last k lines contains two integers x and y (1 ≤ x ≤ n, 1 ≤ y ≤ m) —
the row and the column of one of Igor's starting positions respectively. Rows are numbered from top to bottom, columns — from left to right. It is guaranteed that all starting positions are empty cells.
Output
Print k integers — the maximum number of pictures, that Igor can see if he starts in corresponding position.
Examples
input
5 6 3 ****** *..*.* ****** *....* ****** 2 2 2 5 4 3
output
6 4 10
input
4 4 1 **** *..* *.** **** 3 2
output
8
这是一般的搜索题,当你发现超时的时候,你就少了一个优化,可以把连接起来的'.',标记为一个区域,这样下次再碰到这个区域的点时,可以直接输出,避免再次
搜索而浪费时间,注意num[]数组开的大小,我前面是num[1100],后来才明白,如果n=1000,m=1000; 那么区域的个数就不是1100那么少了,这个要注意,我就
是后来才发现的。。。。。。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; char map[1100][1100]; int vis[1100][1100]; int sum; int time[1100][1100]; int num[1100*1100]; int n,m; int b[4][2]={ {0,1},{0,-1},{1,0},{-1,0} }; int dfs(int x,int y,int pos) { int i; vis[x][y]=1; for(i=0;i<4;i++) { int dx=x+b[i][0]; int dy=y+b[i][1]; if(vis[dx][dy]==0&&dx>=1&&dx<=n&&dy>=1&&dy<=m) { if(map[dx][dy]=='*') { sum++; } else { time[dx][dy]=pos; dfs(dx,dy,pos); } } } return 0; } int main() { int i,j; int k; int pos; scanf("%d%d%d",&n,&m,&k); for(i=1;i<=n;i++) { getchar(); for(j=1;j<=m;j++) { scanf("%c",&map[i][j]); vis[i][j]=0; } } getchar(); pos=0; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(map[i][j]=='.'&&vis[i][j]==0) { pos++; sum=0; time[i][j]=pos; dfs(i,j,pos); num[time[i][j]]=sum; } } } while(k--) { int sx,sy; scanf("%d%d",&sx,&sy); printf("%d\n",num[time[sx][sy]]); } return 0; }
相关文章推荐
- django --fields.E304 错误解决方案
- django学习笔记(1)环境搭建
- 使用Leangoo玩转故事地图
- Howto run google-chrome as root
- 通过接口实现压缩文件、目录,修正遍历方式,未添加排除文件操作
- 高效匠人——回归极客google
- go语言编辑器LiteIDE配置
- codeforces Good Bye 2015 E. New Year and Three Musketeers
- codeforces Good Bye 2015 C - New Year and Domino
- codeforces Good Bye 2015 B
- Golang-interface(四 反射)
- 我与小娜(28):站在AlphaGo背后的人
- 编写GO的WEB开发框架 (七): Response封装和模板渲染
- POJ 2762 Going from u to v or from v to u? 缩点
- CodeForces - 630D Hexagons! (数学规律)
- golang 长短连接处理
- Introduction to The Design and Analysis of Algorithms (1)
- mogodb亿万级数据性能測试
- 四.Django的template
- 二.djangoECHO项目的建立