Luogu P1315 [NOIP2012]观光公交
题目
每次把加速器用在可以是答案减少最多的地方就即可。(这不是废话吗?)
具体而言,我们处理出:
\(sum_i\)到\(i\)为止下车人数之和。
\(t_i\)在\(i\)最晚的上车的人的上车时间。
\(a_i\)表示到达\(i\)的时间。
那么我们做\(k\)次,每次先处理出:
\(l_i\)表示在\(i\)使用加速器,能够使得出发时间减一的最后位置。
然后找贡献最大的,更新\(t,a,l\)即可。
#include<bits/stdc++.h>
using namespace std;
int read(){int x=0;char c=getchar();while(!isdigit(c))c=getchar();while(isdigit(c))x=x*10+c-48,c=getchar();return x;}
int max(int a,int b){return a>b? a:b;}
const int N=1001,M=10001;
int d[N],T[M],A[M],B[M],t[N],s[N],a[N],l[N];
int main()
{
int n=read(),m=read(),k=read(),ans=0,mx,p,i;
for(i=1;i<n;++i) d[i]=read();
for(i=1;i<=m;++i) T[i]=read(),A[i]=read(),B[i]=read(),t[A[i]]=max(t[A[i]],T[i]),++s[B[i]];
for(i=2;i<=n;++i) s[i]=s[i]+s[i-1];
for(a[1]=0,i=2;i<=n;++i) a[i]=max(a[i-1],t[i-1])+d[i-1];
for(i=1;i<=m;++i) ans+=a[B[i]]-T[i];
while(k--)
{
l[n-1]=n,mx=0;
for(i=n-2;i;--i) l[i]=a[i+1]<=t[i+1]? i+1:l[i+1];
for(i=1;i<n;++i) if(s[l[i]]-s[i]>mx&&d[i]) mx=s[l[i]]-s[i],p=i;
ans-=mx,--d[p];
for(i=p+1;i<=n;++i) a[i]=max(a[i-1],t[i-1])+d[i-1];
}
return !printf("%d",ans);
}
\(O(n^2)\):
考虑性质,原图由于必须要等乘客的缘故,肯定被分成若干段。
每段选最靠左的端点必定最优,我们找出最优的段,一直加满,直到新增了一段。
这样每次操作必定增加一段,只会进行\(O(n)\)次。
\(O(nlog\ n)\):
由于段之间是没有影响的,所以可以用优先队列来维护不同的段的最大值,再用数据结构维护每段还需要加多少才会满。
Luogu P1315 [NOIP2012]观光公交的更多相关文章
- 【题解】洛谷P1315 [NOIP2011TG] 观光公交(前缀和+贪心)
次元传送门:洛谷P1315 思路 思路大概想到了 可是代码实现却没想到 所以参考题解了 D2T3的贪心果然有难度 我们考虑在每次用加速器有两种情况 到下一个点还需要等待:以后的时间就不再影响了 到下一 ...
- 洛谷题解 P1315 【观光公交】
这道题很多人都用的模拟(或者暴力),今天我就写一个"标准"的贪心发给大家.(我这段代码差点超时···也差点超内存···) 主要思路:通过贪心求得最小值即可,把加速器用到乘客最多的两 ...
- [luogu]P1315 观光公交[贪心]
[luogu]P1315 [NOIP2011]观光公交 ——!x^n+y^n=z^n 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车, ...
- Luogu 1315 【NOIP2011】观光公交 (贪心)
Luogu 1315 [NOIP2011]观光公交 (贪心) Description 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供 ...
- 洛谷P1315 [NOIP2011提高组Day2T3] 观光公交
P1315 观光公交 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号 ...
- noip 2011观光公交
P1315 观光公交 95通过 244提交 题目提供者该用户不存在 标签贪心递推2011NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 风景迷人的小城Y 市,拥有n 个美 ...
- luoguP1315 观光公交 题解(NOIP2011)(贪心)
P1315 观光公交 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include<cm ...
- 【做题记录】[NOIP2011 提高组] 观光公交
P1315 [NOIP2011 提高组] 观光公交 我们想在 \(k\) 次加速每一次都取当前最优的方案加速. 考虑怎样计算对于每一条边如果在当前情况下使用加速器能够使答案减少的大小. 如果当前到达某 ...
- vijos1741 观光公交 (贪心)
https://www.vijos.org/p/1741 P1741观光公交 请登录后递交 标签:NOIP提高组2011[显示标签] 描述 风景迷人的小城Y市,拥有n个美丽的景点.由于慕名而来的游 ...
随机推荐
- 【JZOJ2156】【2017.7.10普及】复仇者vsX战警之训练
题目 月球上反凤凰装甲在凤凰之力附身霍普之前,将凤凰之力打成五份,分别附身在X战警五大战力上面辐射眼.白皇后.钢力士.秘客和纳摩上(好尴尬,汗). 在凤凰五使徒的至高的力量的威胁下,复仇者被迫逃到昆仑 ...
- layui.form is not a function
改变: var form = layui.form; 如果你是从1.x升级2.x造成的,那只需要在定义的时候吧后面的()去掉就可以了.请关注更新日志:1.x 升 2.0 特别注意事项layDate日期 ...
- ubuntu 微信安装
安装过程: 下载最新版本tar.gz压缩包https://github.com/geeeeeeeeek/electronic-wechat/releases/download/V2.0/linux-x ...
- 通过 PHP 生成 XML
如需使用 PHP 在服务器上生成 XML 响应,请使用下面的代码: <?php header("Content-type:text/xml"); echo "< ...
- rabbitmq 和 kafka 简单的性能测试
测试环境:ubuntu 15.10 64位 cpu:inter core i7-4790 3.60GHZ * 8 内存:16GB 硬盘:ssd 120GB 软件环境:rabbmitmq 3.6.0 ...
- aws常用命令
EC2 挂载 EBS linux 查看块设备: lsblk 格式化磁盘: sudo mkfs -t ext4 /dev/xvdb 挂载卷: sudo mount /dev/xvdb /mnt/mydi ...
- (转载)Kaggle_Titanic生存预测 -- 详细流程吐血梳理
Kaggle_Titanic生存预测 -- 详细流程吐血梳理 https://blog.csdn.net/Koala_Tree/article/details/78725881 Kaggle中Tita ...
- Redis cluster Specification 笔记
ref: http://redis.io/topics/cluster-spec 1. 设计目标: 高性能:线性扩展:不支持合并操作:写操作安全:小概率丢弃:(对于每个key)只要有一个slave工作 ...
- vs2019安装
1.下载vs_enterprise.exe(建议下载到无中文无空格目录) ,这个很小,官网下载企业版即可 2.在当前目录cmd命令执行: vs_enterprise.exe --layout offl ...
- Linux_系统时间管理
目录 目录 时间管理 date指令 系统时间设置timedatectl指令 本地时间同步 时间服务器NTP RHEL6 RHEL7 计划任务 一次性计划任务 at指令 限制用户建立一次性计划任务 周期 ...