度度熊的01世界

Problem Description

度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由0和1组成。

现在给你一个n*m的图像,你需要分辨他究竟是0,还是1,或者两者均不是。

图像0的定义:存在1字符且1字符只能是由一个连通块组成,存在且仅存在一个由0字符组成的连通块完全被1所包围。

图像1的定义:存在1字符且1字符只能是由一个连通块组成,不存在任何0字符组成的连通块被1所完全包围。

连通的含义是,只要连续两个方块有公共边,就看做是连通。

完全包围的意思是,该连通块不与边界相接触。

Input

本题包含若干组测试数据。 每组测试数据包含: 第一行两个整数n,m表示图像的长与宽。 接下来n行m列将会是只有01组成的字符画。

满足1<=n,m<=100

Output

如果这个图是1的话,输出1;如果是0的话,输出0,都不是输出-1。

Sample Input
32 32
00000000000000000000000000000000
00000000000111111110000000000000
00000000001111111111100000000000
00000000001111111111110000000000
00000000011111111111111000000000
00000000011111100011111000000000
00000000111110000001111000000000
00000000111110000001111100000000
00000000111110000000111110000000
00000001111110000000111110000000
00000001111110000000011111000000
00000001111110000000001111000000
00000001111110000000001111100000
00000001111100000000001111000000
00000001111000000000001111000000
00000001111000000000001111000000
00000001111000000000000111000000
00000000111100000000000111000000
00000000111100000000000111000000
00000000111100000000000111000000
00000001111000000000011110000000
00000001111000000000011110000000
00000000111000000000011110000000
00000000111110000011111110000000
00000000111110001111111100000000
00000000111111111111111000000000
00000000011111111111111000000000
00000000111111111111100000000000
00000000011111111111000000000000
00000000001111111000000000000000
00000000001111100000000000000000
00000000000000000000000000000000
32 32
00000000000000000000000000000000
00000000000000001111110000000000
00000000000000001111111000000000
00000000000000011111111000000000
00000000000000111111111000000000
00000000000000011111111000000000
00000000000000011111111000000000
00000000000000111111110000000000
00000000000000111111100000000000
00000000000001111111100000000000
00000000000001111111110000000000
00000000000001111111110000000000
00000000000001111111100000000000
00000000000011111110000000000000
00000000011111111110000000000000
00000001111111111111000000000000
00000011111111111111000000000000
00000011111111111111000000000000
00000011111111111110000000000000
00000000001111111111000000000000
00000000000000111111000000000000
00000000000001111111000000000000
00000000000111111110000000000000
00000000000011111111000000000000
00000000000011111111000000000000
00000000000011111111100000000000
00000000000011111111100000000000
00000000000000111111110000000000
00000000000000001111111111000000
00000000000000001111111111000000
00000000000000000111111111000000
00000000000000000000000000000000
3 3
101
101
011

Sample Outpu0
1
-1——————————————————————————————————————————————这道题在外面加一圈0就好了(这个是防止被一坨1卡的尴尬)然后就是联通块染色如果1有一个0两个就是0如果1有一个0也一个就是1不然就是-1

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m,cnt1,cnt2;
char s[155][155];
bool f,vis[155][155];
int xi[5]={0,0,1,0,-1},yi[5]={0,1,0,-1,0};
struct node{int x,y;
}q[155*155];
void dfs(int xx,int yy,char c){int head=0,tail=1;q[0].x=xx; q[0].y=yy; vis[xx][yy]=1;while(head!=tail){int x=q[head].x,y=q[head].y; head++;for(int i=1;i<=4;i++){int sx=x+xi[i],sy=y+yi[i];if(sx>=0&&sx<=n+1&&sy>=0&&sy<=m+1&&s[sx][sy]==c&&!vis[sx][sy]){q[tail].x=sx; q[tail].y=sy; tail++; vis[sx][sy]=1;}}}
}
int main()
{while(scanf("%d %d",&n,&m)==2){memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++) scanf("%s",s[i]+1);cnt1=0; cnt2=0;for(int i=0;i<=m+1;i++) s[0][i]='0',s[n+1][i]='0';for(int i=0;i<=n+1;i++) s[i][0]='0',s[i][m+1]='0';for(int i=0;i<=n+1;i++)for(int j=0;j<=m+1;j++)if(!vis[i][j]){if(s[i][j]=='1') cnt1++;else cnt2++;dfs(i,j,s[i][j]);}if(cnt1==1&&cnt2==2) printf("0\n");else if(cnt1==1&&cnt2==1) printf("1\n");else printf("-1\n");}return 0;
}

View Code

转载于:https://www.cnblogs.com/lyzuikeai/p/7351301.html

百度之星初赛(A)——T6相关推荐

  1. 二分搜索 2015百度之星初赛1 HDOJ 5248 序列变换

    题目传送门 1 /* 2 二分搜索:在0-1e6的范围找到最小的max (ai - bi),也就是使得p + 1 <= a[i] + c or a[i] - c 3 比赛时以为是贪心,榨干智商也 ...

  2. 2016百度之星 - 初赛(Astar Round2B)解题报告

    此文章可以使用目录功能哟↑(点击上方[+]) 被自己蠢哭,去年还能进一下复赛,今年复赛都没戏了... 链接→2016"百度之星" - 初赛(Astar Round2B)  Prob ...

  3. 2015百度之星初赛(1)1006 旋转卡壳

    矩形面积 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. 2021百度之星初赛二(1001 -- 1003)

    2021百度之星初赛二(1001 – 1003) 1001 题意: 给 a,b,每次 a,b会变为 a+b,a-b,问 k 次之后变成了哪两个数,对 998244353998244353 取模,多组数 ...

  5. 2016百度之星 - 初赛(Astar Round2A)解题报告

    此文章可以使用目录功能哟↑(点击上方[+]) 有点智商捉急,第一题卡了好久,看来不服老,不服笨是不行的了...以下是本人目前的题解,有什么疑问欢迎提出 链接→2016"百度之星" ...

  6. 2021百度之星初赛第一场部分题解

    写在前面 几个家长要求我写一些2021百度之星初赛第一场的题解. 1003 鸽子 原题链接 https://acm.hdu.edu.cn/showproblem.php?pid=6998 http:/ ...

  7. 2011百度之星初赛B圆环

    这是百度之星2011初赛B中的第一道题,题目也很水,只要找到解题思路就OK了.. 题目: 时间限制:1000ms 描述 一个圆环上有n个位置,这n个位置按顺时针依次标号为1, 2, -, n.初始时圆 ...

  8. 百度之星初赛(1)解题报告

    超级赛亚ACMer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. 2015Astar百度之星初赛 1005 序列变化

    序列变换 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  10. 2015Astar百度之星初赛 1001 超级赛亚ACMer

    超级赛亚ACMer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

最新文章

  1. 如何条码打印软件工具箱窗格进行重新定位
  2. java生成可执行文件的方法总结
  3. UVa11988-破损的键盘 Broken Keyboard
  4. ios uiwindow弹窗_iOS-UIWindow详解
  5. wpf之代码设置背景图片
  6. 蓝桥杯2020年第十一届C++省赛第六题-成绩统计
  7. 运用mysql实现工资管理系统_企业工资管理系统的设计与实现(MySQL)
  8. 牛客14709 奇♂妙拆分 枚举
  9. python豆瓣电影爬虫
  10. R语言 - RStudio使用Git版本控制
  11. 自动创建 api 模拟数据
  12. tableView 取消 cell 默认下划线样式 - iOS
  13. java 实现macd算法_java尝试编写macd,试验顶背离底背离
  14. 数据结构之 红黑树(左倾红黑树) java实现
  15. php 顿号转义,PHP实现将标点符号正则替换为空格的方法
  16. Hibernate中的方言
  17. 【python】统计大小写字母个数和数字个数
  18. Html5工单系统,PESCMS Ticket(客服工单系统) V1.3.4 官方版
  19. 在线转换各种格式网站
  20. DeferShading + VSM + HDR + SSAO

热门文章

  1. threejs添加网格辅助线grid
  2. 第五章第三十五题(加法)(Summation)
  3. tableau过期解决办法
  4. 在Mac系统中将html网页转成PDF格式
  5. 弹性盒子 -- flex
  6. 在c语言中 auto的作用,c语言中auto是什么意思
  7. (笔记)集成电路作用解释(杂乱无章,等待质变)
  8. pip install 安装加速(修改为国内源)
  9. 【方法】Latex使用BibTeX生成参考文献列表
  10. 综述丨视频超分辨率研究方法