【BZOJ 3661】 Hungry Rabbit (贪心、优先队列)
3661: Hungry Rabbit
Time Limit: 100 Sec Memory Limit: 512 MBSec Special Judge
Submit: 67 Solved: 47Description
可怕的洪水在夏天不期而至,兔子王国遭遇了前所未有的饥荒,它们不得不去外面的森林里寻找食物。
为了简化起见,我们假设兔子王国中有n只兔子,编号为1n。在救济粮到来之前的m天中,每天恰好有k只兔子需要去森林里寻找粮食。森林里居住着可怕的大灰狼,所幸兔子已经摸清了大灰狼捕食习惯,即狼们在每一天只会捕食特定编号的兔子。为了安全起见,兔子们需要保证每次出去觅食的k只兔子都不会被狼捕食。由于每天出去捕食的兔子都不尽相同,它们为每一天定义了一个生疏度pi,即第i天出来寻找食物,但是第i1天却没有出来觅食的兔子个数。规定第1天的生疏度为0.现在兔子们希望在保证安全的前提下,每天的生疏度不能超过L,请为兔子们构造一个合法的方案。Input
第一行包括四个整数n,m,k和L.
接下来n行,每行一个长度为m的01串。其中第i行第j个字符若为0,则表示狼在第j天会捕食编号为i的兔子,为1则表示不捕食。Output
m行,每行k个1-n之间互不相同的整数,代表这一天出去寻找食物的兔子编号。如果没有合法方案,则输出一行1即可。
Sample Input
5 4 3 1
1001
1101
1111
1110
0111Sample Output
2 3 4
2 3 4
3 4 5
2 3 5HINT
对于 100% 的测试数据,1 <= n;m <= 800; 1 <= k <= n; 1 <= l <= k
Source
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define Maxn 810
#define INF 0xfffffff struct node
{
int l,r,id;
}t[Maxn*Maxn];
struct cmp{bool operator()(node x,node y){return x.r<y.r;}};
struct cmp2{bool operator()(node x,node y){return x.r>y.r;}};
// bool cmp(node x,node y) {return x.r>y.r;}
// bool cmp2(node x,node y) {return x.r<y.r;}
bool cmp3(node x,node y) {return x.l<y.l;}
priority_queue<node,vector<node>,cmp> q1;
priority_queue<node,vector<node>,cmp2> q2; char s[Maxn]; bool vis[Maxn];
int op[Maxn][Maxn];
int main()
{
// int T;
// scanf("%d",&T);
// while(T--)
{
int n,m,k,l;
scanf("%d%d%d%d",&n,&m,&k,&l); int cnt=,id;
for(int i=;i<=n;i++)
{
scanf("%s",s+);
for(int j=;j<=m;j++)
{
if((j==||s[j-]=='')&&s[j]=='') id=j;
else if(j!=&&s[j-]==''&&s[j]=='') t[++cnt].l=id,t[cnt].r=j-,t[cnt].id=i;
if(s[j]==''&&j==m) t[++cnt].l=id,t[cnt].r=m,t[cnt].id=i;
}
}
sort(t+,t++cnt,cmp3);
// int qz=0;
while(!q1.empty()) q1.pop();
while(!q2.empty()) q2.pop();
int nw=;
bool ok=;
memset(vis,,sizeof(vis));
for(int i=;i<=m;i++)
{
int hh=;
while(t[nw+].l<=i&&nw<cnt) q1.push(t[++nw]);
while(!q2.empty()&&q2.top().r<i) {vis[q2.top().id]=;q2.pop();}
while(q2.size()<k)
{
if(q1.empty()||q1.top().r<i) {ok=;break;}
vis[q1.top().id]=;
q2.push(q1.top());q1.pop();
hh++;
if(hh>l&&i!=) break;
}
if((hh>l&&i!=)||!ok) {ok=;break;}
while(hh<l&&!q1.empty()&&q1.top().r>q2.top().r)
{
hh++;
vis[q2.top().id]=;
q2.pop();
vis[q1.top().id]=;
q2.push(q1.top());q1.pop();
}
op[i][]=;
for(int j=;j<=n;j++) if(vis[j]) op[i][++op[i][]]=j;
}
if(!ok) printf("1\n");
else
{
for(int i=;i<=m;i++)
{
for(int j=;j<=op[i][];j++) printf("%d ",op[i][j]);
printf("\n");
}
}
}
return ;
}
2017-04-24 20:03:42
【BZOJ 3661】 Hungry Rabbit (贪心、优先队列)的更多相关文章
- 【BZOJ3661】Hungry Rabbit 贪心
[BZOJ3661]Hungry Rabbit Description 可怕的洪水在夏天不期而至,兔子王国遭遇了前所未有的饥荒,它们不得不去外面的森林里寻找食物.为了简化起见,我们假设兔子王国中有n只 ...
- hihoCoder 1309:任务分配 贪心 优先队列
#1309 : 任务分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN, ...
- UVA 11134 - Fabled Rooks(贪心+优先队列)
We would like to place n rooks, 1 ≤ n ≤ 5000, on a n×n board subject to the following restrict ...
- C. Playlist Educational Codeforces Round 62 (Rated for Div. 2) 贪心+优先队列
C. Playlist time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解
思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...
- Hungry Rabbit
Problem C. Hungry Rabbit Input file: hungry.in Output file: hungry.out Time limit: 10 seconds Memory ...
- 贪心+优先队列 HDOJ 5360 Hiking
题目传送门 /* 题意:求邀请顺序使得去爬山的人最多,每个人有去的条件 贪心+优先队列:首先按照l和r从小到大排序,每一次将当前人数相同的被邀请者入队,那么只要能当前人数比最多人数条件小,该人能 被邀 ...
- [POJ1456]Supermarket(贪心 + 优先队列 || 并查集)
传送门 1.贪心 + 优先队列 按照时间排序从前往后 很简单不多说 ——代码 #include <queue> #include <cstdio> #include <i ...
- Painting The Fence(贪心+优先队列)
Painting The Fence(贪心+优先队列) 题目大意:给 m 种数字,一共 n 个,从前往后填,相同的数字最多 k 个在一起,输出构造方案,没有则输出"-1". 解题思 ...
随机推荐
- Request爬取网站(seo.chinaz.com)百度权重的查询结果
一:脚本需求 利用Python3查询网站权重并自动存储在本地数据库(Mysql数据库)中,同时导出一份网站权重查询结果的EXCEL表格 数据库类型:MySql 数据库表单名称:website_weig ...
- Shiro认证的另一种方式
今天在学习shiro的时候使用另一种shiro验证的方式. 总体的思路是: (1)先在自己的方法中进行身份的验证以及给出提示信息.(前提是将自己的验证方法设为匿名可访问) (2)当验证成功之后到Shi ...
- MVVM模式View和ViewModel的通信
还需要些什么呢 在前面几篇博客中我们尝试去实现了MVVM中的数据绑定.命令绑定和事件绑定.貌似实现的差不多了.我最早尝试用MVVM去开发的时候也是这么想的,没有用第三方框架,甚至只是实现了数据绑定和命 ...
- C基础 旋转数组查找题目
前言 - 引言 题目: 一类有序数组旋转查值问题. 例如: 有序数组 [ , , , , , , , , ] 旋转后为 [ , , , , , , , , ] 如何从中找出一个值索引, not fou ...
- linux文件管理 -> vim编辑总结
vi和vim命令是linux中强大的文本编辑器, 由于Linux系统一切皆文件,而配置一个服务就是在修改其配置文件的参数.vim编辑器是运维工程师必须掌握的一个工具, 没有它很多工作都无法完成.vim ...
- Mac 升级一次,php 就崩溃一次,有味,苹果....
Mac升级系统macOS Sierra后PHP不编译 Mac下搭建PHP开发环境(Apache+PHP+MySQL+phpMyAdmin),当Mac 从OS 10.11升级至macOS Sierra( ...
- log4j与commons-logging slf4j的关系
1. slf4j 他只提供一个核心slf4j api(就是slf4j-api.jar包),这个包只有日志的接口并没有实现 所以如果要使用就得再给它提供一个实现了些接口的日志包, ...
- xgboost gbdt特征点分烈点
lightGBM与XGBoost的区别:(来源于:http://baijiahao.baidu.com/s?id=1588002707760744935&wfr=spider&for= ...
- 你竟然在公钥中下毒!——如何在RSA公钥中添加后门
原文:http://www.hackdig.com/?01/hack-17893.htm 分享到: 当我知道它是如何运行时,我惊得下巴都掉了.这是一个非常简单的手法,但这篇文章会颠覆你之前对RSA的看 ...
- No.6 selenium学习之路之下拉框Select
HTML中,标签显示为select,有option下拉属性的为Select弹框 1.Xpath定位 Xpath语法,顺序是从1开始,编程语言中是0开始