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的更多相关文章

  1. 【BZOJ 3661】 Hungry Rabbit (贪心、优先队列)

    3661: Hungry Rabbit Time Limit: 100 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 67  Solved: 4 ...

  2. 【BZOJ3661】Hungry Rabbit 贪心

    [BZOJ3661]Hungry Rabbit Description 可怕的洪水在夏天不期而至,兔子王国遭遇了前所未有的饥荒,它们不得不去外面的森林里寻找食物.为了简化起见,我们假设兔子王国中有n只 ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. 拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc

    不久前发布了一篇博文".NET轻量级RPC框架:Rabbit.Rpc",当初只实现了非常简单的功能,也罗列了之后的计划,经过几天的不断努力又为Rabbit.Rpc增加了一大波新特性 ...

  5. hdu----(1849)Rabbit and Grass(简单的尼姆博弈)

    Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. 在 Windows 上安装Rabbit MQ 指南

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. Ra ...

  7. .NET轻量级RPC框架:Rabbit.Rpc

    最近准备写一个.NET的管理平台应用在公司,由于存在大量的Client => Server,Server => Client的请求需求在加上之前一直接触了解过RpcClient组件的开发, ...

  8. 古典问题rabbit

    /**古典问题: * 有一对兔子,从出生后第三个月起每个月都生一对兔子, * 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死, * 问每个月的兔子总数为多少? * 程序分析:兔子的规律为数列: ...

  9. Error: unable to connect to node rabbit@mail: nodedown

    某天,开启一个应用时,发现连接rabbitmq失败,本来想用rabbitmqctl来查看队列,结果提示“Error: unable to connect to node rabbit@mail: no ...

随机推荐

  1. iOS 计算时间差

    /** * 计算指定时间与当前的时间差 * @param compareDate 某一指定时间 * @return 多少(秒or分or天or月or年)+前 (比如,3天前.10分钟前) */ +(NS ...

  2. [Algorithms] Graph Traversal (BFS and DFS)

    Graph is an important data structure and has many important applications. Moreover, grach traversal ...

  3. 160804、oracle查询:取出每组中的第一条记录

    oracle查询:取出每组中的第一条记录按type字段分组,code排序,取出每组中的第一条记录 方法一: select type,min(code) from group_info group by ...

  4. 160801、BlockingQueue处理多线程

    前面介绍过spring的taskExecutor,今天介绍一个jdk里处理多线程的方法 一.spring的配置文件(注入bean) <bean id="cmsClickButtonMn ...

  5. JDK源码分析之concurrent包(四) -- CyclicBarrier与CountDownLatch

    上一篇我们主要通过ExecutorCompletionService与FutureTask类的源码,对Future模型体系的原理做了了解,本篇开始解读concurrent包中的工具类的源码.首先来看两 ...

  6. FFMPEG推流到RTMP服务器命令 - weixin_37897683的博客 - CSDN博客 https://blog.csdn.net/weixin_37897683/article/details/81225228

    FFMPEG推流到RTMP服务器命令 - weixin_37897683的博客 - CSDN博客 https://blog.csdn.net/weixin_37897683/article/detai ...

  7. python array

    python中通常情况下for循环会枚举各个元素不会访问下标,例如: l = [1,2,4,6] for val in l: print l 但是有时候我们会需要在便利数组的同时访问下标,这时候可以借 ...

  8. 搞懂head 和 tail 命令

    情景 会点linux命令的人都知道head -n k和tail -n k(k≥0)的作用,但却不知道还支持head -n -k和tail -n +k的用法, 更不知道有着怎样的作用了. 图解 下面,用 ...

  9. requests 中response如何改变编码格式

    查看初始编码 首先查看拿到的response编码格式: (就不放代码了,因为此例需要用到cookie,可自行找个网站具体测试) 可见初始编码为:ISO-8859-1 修改编码 初始编码: 修改后编码: ...

  10. 我的Android进阶之旅------>解决:debug-stripped.ap_' specified for property 'resourceFile' does not exist.

    1.错误描述 更新Android Studio到2.0版本后,出现了编译失败的问题,我clean project然后重新编译还是出现抑郁的问题,问题具体描述如下所示: Error:A problem ...