Hungry Rabbit
Problem C. Hungry Rabbit
Input file: hungry.in
Output file: hungry.out
Time limit: 10 seconds
Memory limit: 512 megabytes
可怕的洪水在夏天不期而至,兔子王国遭遇了前所未有的饥荒,它们不得不去外面的森林里寻找食物。
为了简化起见,我们假设兔子王国中有 n 只兔子,编号为 1 − n。在救济粮到来之前的 m 天中,每天恰好有 k 只兔子需要去森林里寻找粮食。森林里居住着可怕的大灰狼,所幸兔子已经摸清了大灰狼捕食习惯,即狼们在每一天只会捕食特定编号的兔子。为了安全起见,兔子们需要保证每次出去觅食的 k 只兔子都不会被狼捕食。
由于每天出去捕食的兔子都不尽相同,它们为每一天定义了一个生疏度 pi ,即第 i 天出来寻找食物,但是第 i − 1天却没有出来觅食的兔子个数。规定第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
0111
Sample output.
2 3 4
2 3 4
3 4 5
2 3 5
对于样例,在这4天中,出去觅食的兔子集合分别为 {2, 3, 4}, {2, 3, 4}, {3, 4, 5}, {2, 3, 5}.
• 对于 20%的测试数据,1 ≤ n,m ≤ 10
• 对于 100% 的测试数据,1 ≤ n,m ≤ 800, 1 ≤ k ≤ n, 1 ≤ l ≤ k
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=;
int n,m,k,l;
int maxl[N][N],id[N];
bool flag[N][N];
int day;
inline bool cmp(const int &a, const int &b) {
return maxl[a][day]>maxl[b][day];
}
int main() {
// freopen("hungry.in", "r", stdin);
// freopen("hungry.out", "w", stdout);
scanf("%d%d%d%d",&n,&m,&k,&l);
for(int i=;i<=n;i++) {
char s[N];
scanf("%s",s+);
for(int j=m;j;j--)
if(s[j]=='')
maxl[i][j]=;
else
maxl[i][j]=maxl[i][j+]+;
id[i]=i;
}
day=;
sort(id+,id+n+,cmp);
for(int i=;i<=k;i++)
flag[day][id[i]]=;
for(int i=;i<=m;i++){
for(int j=;j<=n;j++)
flag[i][j]=flag[i-][j];
day=i;
sort(id+,id+n+,cmp);
int s=,t=n;
for(int j=;j<=l;j++) {
while(s<=n&&flag[i][id[s]])
s++;
while(t&&!flag[i][id[t]])
t--;
if(s>=t)
break;
flag[i][id[s]]=;
flag[i][id[t]]=;
}
for(int j=;j<=n;j++)
if(flag[i][j]&&!maxl[j][i]) {
printf("-1");
return ;
}
}
for(int i=;i<=m;i++,printf("\n"))
for(int j=;j<=n;j++)
if(flag[i][j])
printf("%d ",j);
return ;
}
Hungry Rabbit的更多相关文章
- 【BZOJ 3661】 Hungry Rabbit (贪心、优先队列)
3661: Hungry Rabbit Time Limit: 100 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 67 Solved: 4 ...
- 【BZOJ3661】Hungry Rabbit 贪心
[BZOJ3661]Hungry Rabbit Description 可怕的洪水在夏天不期而至,兔子王国遭遇了前所未有的饥荒,它们不得不去外面的森林里寻找食物.为了简化起见,我们假设兔子王国中有n只 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc
不久前发布了一篇博文".NET轻量级RPC框架:Rabbit.Rpc",当初只实现了非常简单的功能,也罗列了之后的计划,经过几天的不断努力又为Rabbit.Rpc增加了一大波新特性 ...
- hdu----(1849)Rabbit and Grass(简单的尼姆博弈)
Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 在 Windows 上安装Rabbit MQ 指南
rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. Ra ...
- .NET轻量级RPC框架:Rabbit.Rpc
最近准备写一个.NET的管理平台应用在公司,由于存在大量的Client => Server,Server => Client的请求需求在加上之前一直接触了解过RpcClient组件的开发, ...
- 古典问题rabbit
/**古典问题: * 有一对兔子,从出生后第三个月起每个月都生一对兔子, * 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死, * 问每个月的兔子总数为多少? * 程序分析:兔子的规律为数列: ...
- Error: unable to connect to node rabbit@mail: nodedown
某天,开启一个应用时,发现连接rabbitmq失败,本来想用rabbitmqctl来查看队列,结果提示“Error: unable to connect to node rabbit@mail: no ...
随机推荐
- 使用ghost硬盘对拷备份系统
公司有台server装了OA系统.要备份数据.同一时候假设系统出错之后可以及时回复.所以有买了块同型号硬盘. 用ghost的硬盘对拷功能,将原硬盘的系统和数据拷到新硬盘上.新硬盘挂到server上.当 ...
- Eclipse UML插件
Green UML http://green.sourceforge.net/ AmaterasUML http://amateras.sourceforge.jp/cgi-bin/fswiki_en ...
- beetl模板的${!}用法
转自:http://ibeetl.com/guide/#beetl 2.20. 安全输出 安全输出是任何一个模板引擎必须重视的问题,否则,将极大困扰模板开发者.Beetl中,如果要输出的模板变量为nu ...
- mybatis的oracle的in超过1000的写法
<if test="preIds != null and preIds.size() > 0"> AND PRE_ID IN <trim suffixOve ...
- Minecraft Forge编程入门一 “环境搭建”
什么是Forge Minecraft Forge is a Minecraft application programming interface (API) which allows almost ...
- python中 将字符串和字典的相互转换
1.首先引入json模块 # 引入json模块 import json 2.转换 #JSON到字典转化: dictinfo = json.loads(json_str) # 输出dict类型 字典到J ...
- Redisson教程
Redisson入门 Author:Ricky Date:2017-04-24 Redisson概述 Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Dat ...
- Oracle数据库模型(OLAP/OLTP)
数据库模型 选择数据库模型: 联机事务处理OLTP(on-line transaction processing) OLTP是传统的关系数据库的主要应用,基本的.日常的事务处理.例如银行交易. OLT ...
- AttachThreadInput
BOOL WINAPI AttachThreadInput( _In_ DWORD idAttach, _In_ DWORD idAttachTo, _In_ BOOL fAttach ); i ...
- Linux下如何安装Anaconda?
下载 从https://repo.continuum.io/archive/index.html上下载对应版本的Anaconda. 或者到官网:https://www.anaconda.com/dow ...