Codeforces 193A. Cutting Figure
看起来非常神,但仅仅有三种情况 -1 , 1 ,2.....
2 seconds
256 megabytes
standard input
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.
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.
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.
5 4
####
#..#
#..#
#..#
####
2
5 5
#####
#...#
#####
#...#
#####
2
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的更多相关文章
- Codeforces 1077D Cutting Out(二分答案)
题目链接:Cutting Out 题意:给定一个n长度的数字序列s,要求得到一个k长度的数字序列t,每次从s序列中删掉完整的序列t,求出能删次数最多的那个数字序列t. 题解:数字序列s先转换成不重复的 ...
- CodeForces 998B Cutting(贪心)
https://codeforces.com/problemset/problem/998/B 简单贪心题 代码如下: #include <stdio.h> #include <st ...
- Codeforces 1162D Chladni Figure(枚举因子)
这个题好像可以直接暴力过.我是先用num[len]统计所有每个长度的数量有多少,假如在长度为len下,如果要考虑旋转后和原来图案保持一致,我们用a表示在一个旋转单位中有几个长度为len的线段,b表示有 ...
- @codeforces - 594E@ Cutting the Line
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个字符串 s 与正整数 k.现在你需要进行恰好一次操作: ...
- codeforces 1077D Cutting Out 【二分】
题目:戳这里 题意:给n个数的数组,要求找k个数满足,这k个数在数组中出现的次数最多. 解题思路:k个数每个数出现次数都要最大化,可以想到二分下限,主要是正确的二分不好写. 附ac代码: 1 #inc ...
- Codeforces Round #122 (Div. 2)
A. Exams 枚举分数为3.4.5的数量,然后计算出2的数量即可. B. Square 相当于求\(\min{x(n+1)\ \%\ 4n=0}\) 打表发现,对\(n\ \%\ 4\)分类讨论即 ...
- ACdream区域赛指导赛之手速赛系列(2)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/DaiHaoC83E15/article/details/26187183 回到作案现场 ...
- ACDream手速赛2
地址:http://acdream.info/onecontest/1014 都是来自Codeforce上简单题. A. Boy or Girl 简单字符串处理 B. Walking in ...
- 贪心 Codeforces Round #300 A Cutting Banner
题目传送门 /* 贪心水题:首先,最少的个数为n最大的一位数字mx,因为需要用1累加得到mx, 接下来mx次循环,若是0,输出0:若是1,输出1,s[j]--: 注意:之前的0的要忽略 */ #inc ...
随机推荐
- 用开源NGINX-RTMP-MODULE搭建FLASH直播环境
用开源nginx-rtmp-module搭建flash直播环境 1.将nginx和nginx-rtmp-module的源码包解压PS:nginx-rtmp-module网址https://github ...
- Unity3d 录像
flashtd1: 回复 tqfa :我觉得是有方法可以实现的,之前使用高通的增强显示开发包时发现其实它是添加了一个类似movietexture的东西,叠加在它的摄像机上 如果文档里有操作moviet ...
- 微信小程序保存图片功能实现
小程序保存图片功能实现 wxml: <view class="previewImage" style="display:{{previewImage}}" ...
- iOS UITableView表视图滚动隐藏UINavigationController导航栏
UITableView 继承于UIScrollView 所以UIScrollView 的代理方法相同适用于UITableView 中 隐藏导航栏的方法为: self.navigationControl ...
- 【SpringMVC学习01】宏观上把握SpringMVC框架
springmvc是一个基于mvc的web框架,是spring框架的一个模块,所以springmvc和spring无需通过中间整合层进行整合.我们先来看下spring的一个架构模型,看springmv ...
- jqplot使用小心得
这两天做一个项目,需要画饼图,所以在网上搜到jqplot这个插件.下面就说说我对他的简单的使用心得. 先说说我想要的效果:1.我需要修改饼图每个部分的背景色 2.我需要修改饼图里面文本的颜色和字体大小 ...
- Java成员变量与局部变量同名
看到成员变量和局部变量同名这个知识点的时候一开始有点懵逼,想了一下其实特别简单. 先来看一个简单的代码. 首先我定义了一个Person类. public class Person { private ...
- DataTable转换成匿名类的List类型
DataTable转换成匿名类的List类型 因为匿名类是不能够 Activator.CreateInstance进行反射实例化的 /// <summary> /// 匿名类的转换方式 ...
- jfinal的maven配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 联想E440问题:点击鼠标时,弹出“无法连接synaptics定点装置驱动程序”错误
笔记本:Levono E440 问题描述: 在控制面板中,点击鼠标时,弹出“无法连接synaptics定点装置驱动程序”错误,如何解决? 即使在安装联想的驱动后,也没办法解决 解决步骤: 1. ...