看起来非常神,但仅仅有三种情况 -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. Game Center Achievements and Leaderboards part 1 <转>

    原地址:http://blog.sina.com.cn/s/blog_6b3661a901013xb0.html This is the first part of a step-by-step tu ...

  2. Win10注销在哪?怎么注销电脑

    进入Win10电脑桌面,同时按住键盘上的[Alt]+[F4]组合快捷键,可以快速呼出[关闭Windows]操作选项,在下面的"您希望计算机所什么"里选择[注销],然后点击底部的[确 ...

  3. ASP.NET MVC3 系列教程 - 模型

    I:基础绑定的实现 1.在前面的两篇基础文章(路由 及 控制器&视图)当中,还没对QueryString的绑定进行介绍,因为我觉得它更适合放在这一章节中去介绍.我们在用WebForm去开发的时 ...

  4. EF CodeFirst 命令步骤

    添加EntityFramework 命令:Install-Package EntityFramework 1.启用迁移 Enable-Migrations 2.为挂起的Model变化添加迁移脚本 Ad ...

  5. unity3d贴图2D

    在GUI上绘制图片步骤如下: 1.定义一个2D图片纹理变量: public Texture2D pic; 2.关联变量和贴图的关系: 在布局界面选中MainCamera,找到右侧属性列表中的pic选项 ...

  6. css定位positon

    值 描述 absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位. 元素的位置通过 "left", "top", " ...

  7. 通过SectionIndexer实现微信通讯录

    这里主要参考了使用SectionIndexer实现微信通讯录的效果 在这里做个记录 效果图 页面使用RelativeLayout,主要分为三个部分,match_parent的主listView,右边字 ...

  8. unity, List namespace

    如果要使用List,需要using System.Collections.Generic;

  9. unity prefab使用原则

    prefab可无限apply: 如果把一个模块做成了prefab,这个prefab可能在同一个scene中添加多个,甚至添加到了多个scene中.设所有这些实例为instance(1),instanc ...

  10. 分布式系统的CAP和BASE理论

    1. 背景 网络分区:俗称“脑裂”.当网络发生异常情况,导致分布式系统中部分节点之间的网络延时不断变大,最终导致组成分布式系统的所有节点中,只有部分节点之间能够进行正常通信,而另一些节点则不能. 当网 ...