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 ...
随机推荐
- PANDAS 数据合并与重塑(join/merge篇)
pandas中也常常用到的join 和merge方法 merge pandas的merge方法提供了一种类似于SQL的内存链接操作,官网文档提到它的性能会比其他开源语言的数据操作(例如R)要高效. 和 ...
- jQuery ajax 动态append创建表格出现不兼容ie8
非常多情况下.通过js(jQuery1.10)动态来创建一些样式,对页面的动态交互来说是非常方便的 可是不同的浏览器针对动态生成的不是非常兼容,在此遇见的不兼容ie8.跟各位分享下 代码: json数 ...
- Java RSA加密以及验签
签名加密以及验签工具类: 一般秘钥分为3个key 1.自己生成的私钥, 2.通过私钥生成的公钥1 3.通过提交公钥1给某宝,获取的公钥2. RSA公钥加密算法简介 非对称加密算法.只有短的RSA钥匙才 ...
- FZU1465
题目链接:传送门 题目大意:给你n个整数(可正可负),求有多少个连续的子序列的和==m(时限1S) 题目思路:前缀和+手写hash(map效率太慢,会超时) 具体做法是用一个数组sum,数组的第i位保 ...
- git GUI 入门
一:安装一个git 及gui 二:配置gui及线上的git链接 在Git Gui中,选择Remote->add添加远程服务器,远程服务器信息有两种填写方式,填写https地址或ssh地址,对应g ...
- cocos2d-X学习之主要类介绍:摄像机(CCCamera)
在cocos2d-x中,每个节点(CCNode)都需要用到,即当节点发生旋转.缩放和位置变化等时,都需要覆盖CCCamera,然后这个节点通过CCCamera重新渲染. 类结构: 其主要函数如下: c ...
- 【转】windows 下 goprotobuf 的安装与使用
1. 安装 在网上看了很多教程,都提到要安装 protoc 与 protoc-gen-go,但通过尝试之后并不能正确安装 protoc,一下记录能够顺利安装 protoc 与 protoc-gen-g ...
- Android WebView 加载网页
通过Android 中 WebView 控件加载HTML5 页面,这是实现Android 混合开发的基础. 选择加载的网页可以是本地,也可用使远程的.需要添加访问互联网的权限:<uses-per ...
- log4j 日志相关
1.log 打印异常信息 Logger logger = Logger.getLogger(LoggerTest.class); //追踪产生此日志的类 Logger extends Categor ...
- OVN实战---《A Primer on OVN》翻译
overview 在本文中,我们将在三个host之间创建一个简单的二层overlay network.首先,我们来简单看一下,整个系统是怎么工作的.OVN基于分布式的control plane,其中各 ...