【hihocoder 1474】拆字游戏
【题目链接】:http://hihocoder.com/problemset/problem/1474
【题意】
【题解】
题目的意思是说,那个块在最左端先出现,就先处理那个块;
每个连通块,处理出最下的行标和最上的行标,以及最左的列标和最右的列表;
把在这个连通块里面的数字做上标记就好(注意不要输出其他连通块的1)
【Number Of WA】
0
【完整代码】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int tx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int ty[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 510;
int a[N][N],n,m,b[N][N],tot,xx,xy,dx,dy;
char s[N];
void dfs(int x,int y)
{
if (a[x][y]==0) return;
a[x][y] = 0,b[x][y] = tot;
if (x>dx) dx = x;
if (x<xx) xx = x;
if (y>dy) dy = y;
if (y<xy) xy = y;
rep1(i,1,4)
dfs(x+tx[i],y+ty[i]);
}
void out()
{
cout << dx-xx+1<<' '<<dy-xy+1<<endl;
rep1(i,xx,dx)
{
rep1(j,xy,dy)
if (b[i][j]==tot)
cout<<1;
else
cout<<0;
cout << endl;
}
}
int main()
{
//freopen("F:\\rush.txt","r",stdin);
ios::sync_with_stdio(false),cin.tie(0);//scanf,puts,printf not use
cin >> n >> m;
rep1(i,1,n)
{
cin >> (s+1);
rep1(j,1,m)
if (s[j]=='1')
a[i][j] = 1;
else
a[i][j] = 0;
}
rep1(j,1,m)
{
rep1(i,1,n)
if (a[i][j])
{
tot++;
xx = i,xy = j,dx=i,dy=j;
dfs(i,j);
out();
}
}
return 0;
}
【hihocoder 1474】拆字游戏的更多相关文章
- hiho #1474 拆字游戏(dfs,记录状态)
#1474 : 拆字游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Kui喜欢把别人的名字拆开来,比如“螺”就可以拆成“虫田糸”,小Kui的语文学的不是很好,于是 ...
- 暴力/图论 hihoCoder 1179 永恒游戏
题目传送门 /* 暴力:也是暴力过了,无语.无向图,两端点都要加度数和点 */ #include <cstdio> #include <algorithm> #include ...
- hihocoder offer收割编程练习赛8 B 拆字游戏
思路: 模拟,dfs. 注意题目中的trick,输出一块的时候不要把其他块也输出了. 实现: #include <cstring> #include <iostream> #i ...
- hihocoder #1179 : 永恒游戏 暴力
#1179 : 永恒游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/problemset/problem/11 ...
- hihoCoder #1179 : 永恒游戏 (暴力枚举)
题意: 给出一个有n个点的无向图,每个点上有石头数个,现在的游戏规则是,设置某个点A的度数为d,如果A点的石子数大于等于d,则可以从A点给每个邻接点发一个石子.如果游戏可以玩10万次以上,输出INF, ...
- hihocoder 1163 博弈游戏·Nim游戏
1163 : 博弈游戏·Nim游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 今天我们要认识一对新朋友,Alice与Bob. Alice与Bob总是在进行各种各样的 ...
- HihoCoder - 1615矩阵游戏II(贪心)
矩阵游戏II 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个NxN的整数矩阵,小Hi每次操作可以选择两列,将这两列中的所有数变成它的相反数. 小Hi可以进行任意 ...
- 2017 CVTE Windows开发一面 3.7
下午3点接到了个广州打过来的电话,电话面试总体时间比较短,35分钟. 考察内容: 1.讲实习: 因人而异,将了之前公司做的项目,刚好和面的岗位匹配,面试官听完之后还不忘垂壁一下他们的产品. 2.C#事 ...
- [Offer收割] 编程练习赛1
A HihoCoder 1268 九宫 思路: 一般类似于数独的题目都是使用回溯解决,这里由于题目数据较小同样可以直接DFS得出结果.这里我用了一个偷懒的方法(next_permutation),直接 ...
随机推荐
- [java设计模式]之单例模式
-------------------此部分比較深入地解说了单例模式,原文链接已给出.兴许将涉及一些常见面试问题--------------------------- 原文地址:http://www. ...
- JQuery实现复制到剪贴板功能
在网页中实现复制到剪贴板功能,有两种方法, 第1种方法:使用JavaScript自带的方法,但是这种方法只能在IE下使用. document.execCommand("Copy") ...
- 哈理工2015暑假集训 zoj 2975 Kinds of Fuwas
G - Kinds of Fuwas Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Subm ...
- android logo:内核、android开机动画【转】
本文转载自: 关键词:Android 开机logo 开机动画 initlogo.rle bootanimation desc.txt 平台信息:内核:linux2.6/linux3.0系统:a ...
- JS容易犯错的this和作用域
var someuser = { name: 'byvoid', func: function() { console.log(this.name); } }; var foo = { name: ' ...
- B1001 狼抓兔子 最小割
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- Java压缩技术(一) ZLib
原文:http://snowolf.iteye.com/blog/465433 有关ZLib可参见官方主页 http://www.zlib.net/ ZLib可以简单的理解为压缩/解压缩算法,它与ZI ...
- POJ 1149 PIGS (AC这道题很不容易啊)网络流
PIGS Description Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlo ...
- POJ 2945 trie树
Find the Clones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7704 Accepted: 2879 Descr ...
- struts2框架搭建(一)
struts2是一个基于mvc的web应用框架.struts2本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器层(Controller)来建立模型与视图的数据交互. str ...