看起来非常神,但仅仅有三种情况 -1 , 1 ,2.....

A. Cutting Figure
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

You've gotten an n × m sheet of squared paper. Some of its squares are painted. Let's mark the set of all painted squares as A.
Set A is connected. Your task is to find the minimum number of squares that we can delete from set A to
make it not connected.

A set of painted squares is called connected, if for every two squares a and b from
this set there is a sequence of squares from the set, beginning in a and ending in b,
such that in this sequence any square, except for the last one, shares a common side with the square that follows next in the sequence. An empty set and a set consisting of exactly one square are connected by definition.

Input

The first input line contains two space-separated integers n and m (1 ≤ n, m ≤ 50)
— the sizes of the sheet of paper.

Each of the next n lines contains m characters —
the description of the sheet of paper: the j-th character of the i-th
line equals either "#", if the corresponding square is painted (belongs to set A), or equals "." if the corresponding square is not painted (does not belong
to set A). It is guaranteed that the set of all painted squares A is
connected and isn't empty.

Output

On the first line print the minimum number of squares that need to be deleted to make set A not connected. If it is impossible, print -1.

Sample test(s)
input
5 4
####
#..#
#..#
#..#
####
output
2
input
5 5
#####
#...#
#####
#...#
#####
output
2
Note

In the first sample you can delete any two squares that do not share a side. After that the set of painted squares is not connected anymore.

The note to the second sample is shown on the figure below. To the left there is a picture of the initial set of squares. To the right there is a set with deleted squares. The deleted squares are marked with crosses.


/**
* Created by ckboss on 14-10-8.
*/
import java.util.*; public class CuttingFigure {
static int n,m;
static int[] dir_x = {0,0,1,-1};
static int[] dir_y = {1,-1,0,0};
static boolean[][] vis = new boolean[55][55];
static char[][] map = new char[55][55];
static boolean inmap(int x,int y){
return (x>=0&&x<n)&&(y>=0&&y<m);
} static void dfs(int x,int y){
vis[x][y]=true;
for(int i=0;i<4;i++){
int X=dir_x[i]+x;
int Y=dir_y[i]+y;
if(inmap(X,Y)&&vis[X][Y]==false&&map[X][Y]=='#'){
dfs(X,Y);
}
}
} static int CountNum(int x,int y){
for(int i=0;i<55;i++) Arrays.fill(vis[i],false);
if(inmap(x,y)) vis[x][y]=true;
int cnt=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(vis[i][j]==false&&map[i][j]=='#'){
dfs(i,j);
cnt++;
}
}
}
return cnt;
} public static void main(String[] args){
Scanner in = new Scanner(System.in);
n=in.nextInt(); m=in.nextInt();
int nb=0;
in.nextLine();
for(int i=0;i<n;i++){
String line = in.nextLine();
for(int j=0;j<m;j++){
map[i][j]=line.charAt(j);
if(map[i][j]=='#') nb++;
}
}
if(nb<3){
System.out.println("-1");
return ;
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(CountNum(i,j)==1){
continue;
}
else {
System.out.println("1");
return ;
}
}
}
System.out.println("2");
}
}

Codeforces 193A. Cutting Figure的更多相关文章

  1. Codeforces 1077D Cutting Out(二分答案)

    题目链接:Cutting Out 题意:给定一个n长度的数字序列s,要求得到一个k长度的数字序列t,每次从s序列中删掉完整的序列t,求出能删次数最多的那个数字序列t. 题解:数字序列s先转换成不重复的 ...

  2. CodeForces 998B Cutting(贪心)

    https://codeforces.com/problemset/problem/998/B 简单贪心题 代码如下: #include <stdio.h> #include <st ...

  3. Codeforces 1162D Chladni Figure(枚举因子)

    这个题好像可以直接暴力过.我是先用num[len]统计所有每个长度的数量有多少,假如在长度为len下,如果要考虑旋转后和原来图案保持一致,我们用a表示在一个旋转单位中有几个长度为len的线段,b表示有 ...

  4. @codeforces - 594E@ Cutting the Line

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个字符串 s 与正整数 k.现在你需要进行恰好一次操作: ...

  5. codeforces 1077D Cutting Out 【二分】

    题目:戳这里 题意:给n个数的数组,要求找k个数满足,这k个数在数组中出现的次数最多. 解题思路:k个数每个数出现次数都要最大化,可以想到二分下限,主要是正确的二分不好写. 附ac代码: 1 #inc ...

  6. Codeforces Round #122 (Div. 2)

    A. Exams 枚举分数为3.4.5的数量,然后计算出2的数量即可. B. Square 相当于求\(\min{x(n+1)\ \%\ 4n=0}\) 打表发现,对\(n\ \%\ 4\)分类讨论即 ...

  7. ACdream区域赛指导赛之手速赛系列(2)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/DaiHaoC83E15/article/details/26187183        回到作案现场 ...

  8. ACDream手速赛2

    地址:http://acdream.info/onecontest/1014   都是来自Codeforce上简单题.   A. Boy or Girl 简单字符串处理   B. Walking in ...

  9. 贪心 Codeforces Round #300 A Cutting Banner

    题目传送门 /* 贪心水题:首先,最少的个数为n最大的一位数字mx,因为需要用1累加得到mx, 接下来mx次循环,若是0,输出0:若是1,输出1,s[j]--: 注意:之前的0的要忽略 */ #inc ...

随机推荐

  1. JMeter 十三:生成 report dashboard

    参考:http://jmeter.apache.org/usermanual/generating-dashboard.html JMeter 3.x开始,可以生成HTML格式的report . 注意 ...

  2. 也谈编译 VS 解释

    语言发展 计算机的硬件仅仅能识别0和1组成的机器指令,而机器指令是最主要的计算机语言,可是我们平时进行程序设计时肯定不会用机器语言来编程,由于用它的效率低.更让人难以理解. 因此聪明的人类发明了汇编语 ...

  3. 【Linux】通过传入变量进行数学运算

    一个简单的sum求和 #! /bin/bash ## For get the sum of tow numbers ## Writen by Qinys ## Date:2018-06-26 a=1 ...

  4. RSA/DSA 密钥的工作原理

    下面从整体上粗略的介绍了 RSA/DSA 密钥的工作原理.让我们从一种假想的情形开始,假定我们想用 RSA 认证允许一台本地的 Linux 工作站(称作 localbox)打开 remotebox 上 ...

  5. Docker Container同时启动多服务 supervisor

    Docker Container同时启动多服务 转载请注明来自:http://blog.csdn.net/wsscy2004 昨天踩了个天坑,我有一个基本的镜像centos6.5+ssh,是通过Doc ...

  6. 解决windows server2003 64位操作系统上不能加载32位应用程序dll 的问题

    [FileLoadException: Could not load file or assembly 'sapnco_utils, Version=3.0.0.42, Culture=neutral ...

  7. iOS10相册相机闪退bug

    iOS10系统下调用系统相册.相机功能,遇到闪退的情况,描述如下: This app has crashed because it attempted to access privacy-sensit ...

  8. geopandas python地图绘制

    #geopandas python地理数据处理 瓦片地图:瓦片地图金字塔模型是一种多分辨率层次模型,从瓦片金字塔的底层到顶层,分辨率越来越低,但表示的地理范围不变.首先确定地图服务平台所要提供的缩放级 ...

  9. c++ abs与fabs

    在stdlib.h中定义的abs只针对整数取决对值,如果要对浮点数取绝对值,应该用fabs(或fabsf). 而math.h中定义的abs是可以对浮点数取绝对值的. 所以如果包含了stdlib.h和m ...

  10. springboot页面缓存和url缓存实例

    @Autowired RedisService redisService; @Autowired GoodsService goodsService; @Autowired ThymeleafView ...