【USACO09FEB】 庙会班车 Fair Shuttle 贪心+线段树
Although Farmer John has no problems walking around the fair to collect prizes or see the shows, his cows are not in such good shape; a full day of walking around the fair leaves them exhausted. To help them enjoy the fair, FJ has arranged for a shuttle truck to take the cows from place to place in the fairgrounds.
FJ couldn't afford a really great shuttle, so the shuttle he rented traverses its route only once (!) and makes N (1 <= N <= 20,000) stops (conveniently numbered 1..N) along its path. A total of K (1 <= K <= 50,000) groups of cows conveniently numbered 1..K wish to use the shuttle, each of the M_i (1 <= M_i <= N) cows in group i wanting to ride from one stop S_i (1 <= S_i < E_i) to another stop E_i (S_i < E_i <= N) farther along the route.
The shuttle might not be able to pick up an entire group of cows (since it has limited capacity) but can pick up partial groups as appropriate.
Given the capacity C (1 <= C <= 100) of the shuttle truck and the descriptions of the groups of cows that want to visit various sites at the fair, determine the maximum number of cows that can ride the shuttle during the fair.
逛逛集市,兑兑奖品,看看节目对农夫约翰来说不算什么,可是他的奶牛们非常缺乏锻炼——如果要逛完一整天的集市,他们一定会筋疲力尽的。所以为了让奶牛们也能愉快地逛集市,约翰准备让奶牛们在集市上以车代步。但是,约翰木有钱,他租来的班车只能在集市上沿直线跑一次,而且只能停靠N(1 ≤N≤20000)个地点(所有地点都以1到N之间的一个数字来表示)。现在奶牛们分成K(1≤K≤50000)个小组,第i 组有Mi(1 ≤Mi≤N)头奶牛,他们希望从Si跑到Ti(1 ≤Si<Ti≤N)。
由于班车容量有限,可能载不下所有想乘车的奶牛们,此时也允许小里的一部分奶牛分开乘坐班车。约翰经过调查得知班车的容量是C(1≤C≤100),请你帮助约翰计划一个尽可能满足更多奶牛愿望的方案。
输入输出格式
【输入】
第一行:包括三个整数:K,N和C,彼此用空格隔开。
第二行到K+1行:在第i+1行,将会告诉你第i组奶牛的信息:Si,Ei和Mi,彼
此用空格隔开。
【输出】
第一行:可以坐班车的奶牛的最大头数。
输入输出样例
8 15 3
1 5 2
13 14 1
5 8 3
8 14 2
14 15 1
9 12 1
12 15 2
4 6 1
10
说明
班车可以把2头奶牛从1送到5,3头奶牛从5送到8,2头奶牛从8送到14,1头
奶牛从9送到12,1头奶牛从13送到14,1头奶牛从14送到15。
--------------------------------------------------------------------------------------------------------------------------
本来想用这道题来练一下线段树的,结果反而发现了贪心这个大坑然后顺势补了一下????
never mind....那就两个都写一下吧
首先强烈安利一个blog!!点击这里 直到看了这个我才终于搞懂了贪心的思路。
我们要枚举的不是整个行程1~n怎样填满,而是一次一次的(从1~k)将每组牛往空余的座位塞。
对于每组奶牛,我们要选择上一次下车位置最接近下一次起点的座位接上去
用h[c]记录每个座位最后被占用的时间节点。
读入之后k组牛先按照 最早结束为第一关键字、最早开始为第二关键字排序,然后开始贪心枚举
每一次从h[c]中取出结束时间最早的座位 如果在当前枚举的i组开始前就已经空了,就可以坐下
坐下一只牛,ans++
具体贪心证明请看上面的链接
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 50010
using namespace std;
struct node
{
int m,s,t;
}e[N];
bool cmp(node a,node b)
{
if(a.t!=b.t)
return a.t<b.t;
return a.s<b.s;
}
bool cmmp(int a,int b)
{
return a>b;
}
int n,k,c,ans;
int h[];//第i处被占用结束的时间
int main()
{
scanf("%d%d%d",&k,&n,&c);
for(int i=;i<=k;i++)
scanf("%d%d%d",&e[i].s,&e[i].t,&e[i].m);
sort(e+,e+k+,cmp);
for(int i=;i<=k;i++)
{
sort(h+,h+c+,cmmp);
for(int j=;j<=c&&e[i].m;j++)
{
if(h[j]<=e[i].s)
{
ans++;
h[j]=e[i].t;
e[i].m--;
}
}
}
printf("%d",ans);
return ;
}
那么线段树又用在哪里呢?
如果数据水,我们可以在每一选择h[c]的时候排一次序,但如果数据认真,这个过程就可以用线段树维护。
这是代码:
upd:
哭了
我又看了一个小时也没反应过来线段树怎么加
太菜了QAQ
upd2:
我终于看懂了!!!!
原来加入线段树之后,整个过程就回到了我最早的那种思路啦!!!!
就是维护的区间是1~n的整条路的长度,每组牛看作为一个子区间
用子区间覆盖总区间,然后求的是 在重叠部分厚度(即重叠区间数)不超过c的情况下能取的最大子区间个数(当然每个区间有重复m_i次)
然后就变成区间查询最大值和区间修改了
每次查最大值有没有超过c,并和本组的牛数做比较,累计答案,区间内的牛数++;
好啦代码就明天再更了ovo
(太迷幻了 三天以前的思路就是正解但但是不知道怎么处理并且还一心想要先写贪心 233333333)
【USACO09FEB】 庙会班车 Fair Shuttle 贪心+线段树的更多相关文章
- 【Luogu】P1607庙会班车Fair Shuttle(线段树+贪心)
我不会做贪心题啊……贪心题啊……题啊……啊…… 我真TM菜爆了啊…… 这题就像凌乱的yyy一样,把终点排序,终点相同的按起点排序.然后维护一个查询最大值的线段树.对于一个区间[l,r],如果这个区间已 ...
- 洛谷P1607 [USACO09FEB]庙会班车Fair Shuttle
P1607 [USACO09FEB]庙会班车Fair Shuttle 题目描述 Although Farmer John has no problems walking around the fair ...
- 洛谷 P1607 [USACO09FEB]庙会班车Fair Shuttle 解题报告
P1607 [USACO09FEB]庙会班车Fair Shuttle 题目描述 Although Farmer John has no problems walking around the fair ...
- P1607 [USACO09FEB]庙会班车Fair Shuttle
题目描述 Although Farmer John has no problems walking around the fair to collect prizes or see the shows ...
- [USACO09FEB]庙会班车Fair Shuttle 线段树维护maxx&&贪心
题目描述 Although Farmer John has no problems walking around the fair to collect prizes or see the shows ...
- 线段树【p1607】[USACO09FEB]庙会班车Fair Shuttle
Description 逛逛集市,兑兑奖品,看看节目对农夫约翰来说不算什么,可是他的奶牛们非常缺乏锻炼--如果要逛完一整天的集市,他们一定会筋疲力尽的.所以为了让奶牛们也能愉快地逛集市,约翰准备让奶牛 ...
- 【贪心】洛谷P1607 [USACO09FEB]庙会班车Fair Shuttle 题解
不是很容易写出正解的贪心问题. 题目描述 Although Farmer John has no problems walking around the fair to collect pri ...
- [USACO09FEB]庙会班车Fair Shuttle
题目描述 逛逛集市,兑兑奖品,看看节目对农夫约翰来说不算什么,可是他的奶牛们非常缺乏锻炼——如果要逛完一整天的集市,他们一定会筋疲力尽的.所以为了让奶牛们也能愉快地逛集市,约翰准备让奶牛们在集市上以车 ...
- BZOJ4391 High Card Low Card [Usaco2015 dec](贪心+线段树/set库
正解:贪心+线段树/set库 解题报告: 算辣直接甩链接qwq 恩这题就贪心?从前往后从后往前各推一次然后找一遍哪个地方最大就欧克了,正确性很容易证明 (这里有个,很妙的想法,就是,从后往前推从前往后 ...
随机推荐
- 【整站源码分享】分享一个JFinal3.4开发的整站源码,适合新手学习
分享这个源码是14年开发上线的<威海创业者>站点的全套整站源码,前后端都在一个包里.当时开发使用的是JFinal1.4,最近改成了JFinal3.4.使用的JSP做的页面.有一定的参考价值 ...
- awk对列求和
awk 'BEGIN{total=0}{total+=$1}END{print total}' 文件名
- ALTER AVAILABILITY GROUP (Transact-SQL)
更改 SQL Server 中现有的 AlwaysOn 可用性组. 只有当前主副本支持大多数 ALTER AVAILABILITY GROUP 参数. 但是,只有辅助副本支持 ...
- 如何在Sierra运行 Specials K 的patch
https://github.com/ApolloZhu/CORE-Keygen-and-Special-K-for-Sierra-Utility/blob/master/Special%20K%20 ...
- C基础的练习集及测试答案(1-15)
练习题:注:标有(课堂)字样的为课上练习,其他为课下练习基础题(50题)1.(课堂)编写程序,输出“XXX欢迎来到动物园!”(XXX是自己的名字). //1.(课堂)编写程序,输出“XXX欢迎来到动物 ...
- 基于Activiti5.15.1 自定义用户、组(User,Group)实现
基于Activiti5.15.1 自定义用户.组(User,Group)实现 本人刚接触Activiti,最近工作中需要将Activiti中原有的用户,组(ACT_ID_USER,ACT_ID_GRO ...
- 安装python3.6 pip3 flake8
apt-get install python3-pip # Python3 ➜ ~ pip3 -V pip 9 ...
- key directories in the linux file system
Key directories in the file system: */: Root directory (base of file system) /bin: Executable progra ...
- JQuery EasyUI学习记录(四)
1.EasyUI中的validatebox使用 提供的校验规则: 1.非空校验required="required" 2.使用validType指定 email: 正则表达式匹配电 ...
- DD命令做备份和恢复
正确的备份方法是先挂载移动硬盘分区:mount /dev/sdb5 /mnt 然后再备份:dd if=/dev/sda of=/mnt/backup_sda.img 恢复时同样要先挂载,再恢复:mou ...