#1474 : 拆字游戏
-
描述
小Kui喜欢把别人的名字拆开来,比如“螺”就可以拆成“虫田糸”,小Kui的语文学的不是很好,于是她决定使用编程的方式来解决这个问题。
给出一个01矩阵,1占据的部分即为需要拆的字,如果两个1分享一条边,那么它们连通。连通具有传递性,即如果a、b连通,b、c连通,则a、c连通。
连通的一系列1被看做可以拆出的一块,现在小Kui需要输出这些拆出的块(用一个01矩阵表示,并且要求矩阵的大小尽可能的小)。
为了确保输出的顺序尽可能的和书写的顺序一致,小Kui从每个块中选出最左上角的点(最左侧的点中,最靠上的)作为代表点,然后按照代表点从左到右(若相同则按从上到下)的顺序输出所有拆出的块。
输入
输入的第一行为两个正整数N、M,表示01矩阵的大小。
接下来N行,每行M个01字符,描述一个需要拆的字。
对于40%的数据,满足1<=N,M<=10。
对于100%的数据,满足1<=N,M<=500。
输出
按照代表点从左到右(若相同则按从上到下)的顺序输出所有拆出的块。
对于每个块,先输出其大小,然后用对应的01矩阵表示这个块。
额外的样例
样例输入 样例输出 11 17
00000000000000000
00001111111100000
00000000000000000
00111111111111100
00000000100000000
00000010101110000
00000110100011000
00011100100001000
00000010100000000
00000001100000000
000000000000000007 13
1111111111111
0000001000000
0000001000000
0000001000000
0000001000000
0000001000000
0000011000000
3 4
0001
0011
1110
1 8
11111111
1 1
1
3 4
1110
0011
0001样例输入
-
14 22 0000000000001111111100 0000000000001101101100 0000110000001111111100 0000110000001101101100 0111111110001111111100 0110110110000000000000 0110110110000011000000 0111111110001111111000 0000110000000001100000 0000110110001111111100 0111111111000111111000 0000000010001101101100 0000000000000001100000 0000000000000011100000
- 样例输出
-
10 9 000110000 000110000 111111110 110110110 110110110 111111110 000110000 000110110 111111111 000000010 5 8 11111111 11011011 11111111 11011011 11111111 8 8 00110000 11111110 00011000 11111111 01111110 11011011 00011000 00111000
-
#include <queue> #include <vector> #include <iostream> using namespace std;const int dir[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; int n, m, mx, my, Mx, My;void floodfill(vector<vector<int>> &a, int x, int y) {a[x][y] = 0;queue<pair<int, int>> q;q.push(make_pair(x, y));while (!q.empty()){auto p = q.front();q.pop();mx = min(p.first, mx);my = min(p.second, my);Mx = max(p.first, Mx);My = max(p.second, My);for (int i = 0; i < 4; i++){int xx = p.first + dir[i][0];int yy = p.second + dir[i][1];if (xx >= 0 && xx < n && yy >= 0 & yy < m && a[xx][yy] == 1){a[xx][yy] = 0;q.push(make_pair(xx, yy));}}} }int main() {freopen( "/home/liyuanshuo/ClionProject/hihocoder8/in.in", "r", stdin);cin >> n >> m;vector<vector<int>> a(n, vector<int>(m));for (int i = 0; i < n; i++)for (int j = 0; j < m; j++){char ch;cin >> ch;a[i][j] = ch - '0';}auto b = a;for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)if (a[j][i]){mx = n; my = m; Mx = -1, My = -1;floodfill(a, j, i);cout << Mx - mx + 1 << ' ' << My - my + 1 << endl;for (int k = mx; k <= Mx; k++){for (int l = my; l <= My; l++)if (b[k][l] == 1 && a[k][l] == 0){b[k][l] = 0;cout << 1;}elsecout << 0;cout << endl;}}return 0; }
#1474 : 拆字游戏相关推荐
- hiho #1474 : 拆字游戏(dfs)@
#1474 : 拆字游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Kui喜欢把别人的名字拆开来,比如"螺"就可以拆成"虫田糸&qu ...
- hiho #1474 拆字游戏(dfs,记录状态)
#1474 : 拆字游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Kui喜欢把别人的名字拆开来,比如"螺"就可以拆成"虫田糸&qu ...
- 【hihocoder 1474】拆字游戏
[题目链接]:http://hihocoder.com/problemset/problem/1474 [题意] [题解] 题目的意思是说,那个块在最左端先出现,就先处理那个块; 每个连通块,处理出最 ...
- hihocoder offer收割编程练习赛8 B 拆字游戏
思路: 模拟,dfs. 注意题目中的trick,输出一块的时候不要把其他块也输出了. 实现: 1 #include <cstring> 2 #include <iostream> ...
- PIPIOJ 1033: 拆字游戏 dfs连通分量
题目: http://39.106.164.46/problem.php?id=1033 代码如下: #include<iostream> #include<algorithm> ...
- 1033: 拆字游戏
题目描述 PiPi喜欢把别人的名字拆开来,比如"螺"就可以拆成"虫田糸",PiPi的语文学的不是很好,于是她决定使用编程的方式来解决这个问题. 给出一个01矩阵 ...
- hiho232周 拆字游戏
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Kui喜欢把别人的名字拆开来,比如"螺"就可以拆成"虫田糸",小Kui的语文学的 ...
- 每日一题之 hiho232周 拆字游戏
描述 小Kui喜欢把别人的名字拆开来,比如"螺"就可以拆成"虫田糸",小Kui的语文学的不是很好,于是她决定使用编程的方式来解决这个问题. 给出一个01矩阵,1 ...
- 2017 CVTE Windows开发一面 3.7
下午3点接到了个广州打过来的电话,电话面试总体时间比较短,35分钟. 考察内容: 1.讲实习: 因人而异,将了之前公司做的项目,刚好和面的岗位匹配,面试官听完之后还不忘垂壁一下他们的产品. 2.C#事 ...
最新文章
- ajax走error的条件,Ajax进入ERROR的部分条件总结
- 川崎机器人示教盒维修_专业维修丹阳市KUKA库卡KRC2库卡C4主板维修{苏州罗韦维修}...
- c++面试题中经常被面试官面试的小问题总结(一)(本篇偏向基础知识)
- 好程序员Web前端教程分享Vue学习心得
- python小程序-整理了适合新手的20个Python练手小程序
- 【漏洞复现】ThinkPHP5 5.x 远程命令执行(getshell)
- 嵌入式linux 配置usb otg,嵌入式系统设计中的USB OTG方案
- 学习笔记(40):Python实战编程-文本
- 为《31天成为IT服务达人》征求正式名字
- 实战|手把手教你训练一个基于Keras的多标签图像分类器
- 阿里高级技术专家邱小侠:微服务架构的理论基础 - 康威定律
- vue 引入 less、scss、styles 全局样式变量
- c#中动态调用webService
- openGL绘制地球
- 加入合作伙伴计划应留意的5个危险信号
- 微信小程序分享朋友圈 详细教程及注意事项
- Java如何找出数组中前k个高频元素
- 五十三 九环山遇鬼(上)我在软件园的那些日子里
- python项目对接腾讯云发送短信
- 字库芯片GT20L16S1Y使用记录