洛谷P1315 观光公交
SB贪心......暴露了我代码能力巨弱的本质。
解:首先我们应该想到DP(但是我想到了贪心......)
然后分析题目本质,每个点有个限制,最早开走时间不得早于最晚上车时间。
然后我们就可以把每个人看做都在那个时间上车。
然后我们发现,对一个地方使用加速,会影响它后面一段区间。
然后就有个暴力·雏形是枚举在某个点用加速,看它能够减少的时间,取最大的那个用。
然后看一眼数据范围,大概是n²,可以过,只要你每次找到收益最大的点是O(n)即可。
然后发现好难写,细节巨多无比......一直觉得这个算法是错的,因为只有一个想法,根本无法转成代码实现。
然后肝了好久,受不了了,去看题解,发现我TM想的是正解,只是不会实现......
代码实现:
固定数组:limit,up,down,sum,分别表示最晚上车时间,上车人数,下车人数,down的前缀和。
变化数组:dis,to,to_lar,now,influ,分别表示所用时间(D),最远能影响到的位置,这条影响链上最多能承受减去的时间,抵达这里的时间,这里修改会影响的人数。
大部分可变数组都倒序求出,now是正序求出。
然后试一下某hack数据:
4 5 1
3 0 20 1 2
0 1 4
0 1 4
0 1 4
0 1 4 ans = 18
#define wwx AK_IOI #include <cstdio>
#include <algorithm> const int N = , INF = 0x7f7f7f7f, M = ; struct Custom {
int t, A, B;
}a[M]; int n, m, k, dis[N], limit[N], to[N], now[N], up[N], down[N], sum[N], influ[N], to_lar[N]; int main() {
scanf("%d%d%d", &n, &m, &k);
for(int i = ; i < n; i++) {
scanf("%d", &dis[i]);
}
for(int i = ; i <= m; i++) {
scanf("%d%d%d", &a[i].t, &a[i].A, &a[i].B);
limit[a[i].A] = std::max(limit[a[i].A], a[i].t);
up[a[i].A]++;
down[a[i].B]++;
}
sum[] = down[];
for(int i = ; i <= n; i++) {
limit[i] = std::max(limit[i], limit[i - ]);
sum[i] = sum[i - ] + down[i];
}
// get limit sum up down while(k) {
now[] = ;
for(int i = ; i <= n; i++) {
now[i] = std::max(now[i - ], limit[i - ]) + dis[i - ];
}
int large = -, pos = -;
to[n] = n - ;
to_lar[n] = INF;
for(int i = n - ; i >= ; i--) {
if(now[i + ] > limit[i + ]) {
to[i] = to[i + ];
to_lar[i] = std::min(to_lar[i + ], now[i + ] - limit[i + ]);
//to_lar[i] = std::min(to_lar[i], dis[i]); <- ERROR
}
else {
to[i] = i;
to_lar[i] = INF;
}
influ[i] = sum[to[i] + ] - sum[i];
//printf("influ : %d %d \n", i, influ[i]);
if(influ[i] > large && to_lar[i] && dis[i]) {
large = influ[i];
pos = i;
}
}
if(to_lar[pos] == ) {
break;
}
to_lar[pos] = std::min(to_lar[pos], dis[pos]);
dis[pos] -= std::min(to_lar[pos], k);
k -= std::min(to_lar[pos], k);
//printf("pos = %d to[] = %d lar = %d \n", pos, to[pos], to_lar[pos]);
} now[] = ;
for(int i = ; i <= n; i++) {
now[i] = std::max(now[i - ], limit[i - ]) + dis[i - ];
} int ans = ;
for(int i = ; i <= m; i++) {
ans += now[a[i].B] - a[i].t;
} printf("%d", ans);
return ;
}
AC代码
洛谷P1315 观光公交的更多相关文章
- [NOIP2011] 提高组 洛谷P1315 观光公交
题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...
- 洛谷 P1315 观光公交 —— 贪心
题目:https://www.luogu.org/problemnew/show/P1315 问题是想不明白改动一条边会对后面造成怎样的影响: 实际上影响的会是一段,当某个车站出发时间受其来人牵制时, ...
- NOIP2011 洛谷P1315 观光公交
题目传送门 先解释一下数组的意义: d[i]表示公交车从第i个点到第i+1个点需要的时间 pas结构体中:t表示这个乘客到公交站牌的时间,u表示起点,v表示终点 wait[i]表示公交车在第i个站点等 ...
- 洛谷P1315 观光公交 [noip2011D2T3] 贪心
正解:贪心 解题报告: 这里是链接! 唔我觉得还是很容易想到是贪心的,这个难就难在怎么贪心 下面列一下常见的几个贪心思想: 1)根据车上的人数排序,人最多的那条路用加速器 错误,人数多并不意味着加速的 ...
- 【题解】洛谷P1315 [NOIP2011TG] 观光公交(前缀和+贪心)
次元传送门:洛谷P1315 思路 思路大概想到了 可是代码实现却没想到 所以参考题解了 D2T3的贪心果然有难度 我们考虑在每次用加速器有两种情况 到下一个点还需要等待:以后的时间就不再影响了 到下一 ...
- 洛谷P1315 [NOIP2011提高组Day2T3] 观光公交
P1315 观光公交 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号 ...
- [luogu]P1315 观光公交[贪心]
[luogu]P1315 [NOIP2011]观光公交 ——!x^n+y^n=z^n 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车, ...
- 题解【洛谷P1315】[NOIP2011]观光公交
题目描述 风景迷人的小城 Y 市,拥有 \(n\) 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务. 观光公交车在第 \(0\) 分钟出现在 \( ...
- P1315 观光公交
题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...
随机推荐
- MVC 使用cshtml的一些基础知识-和相关整理
首先在认识cshtml之前,先要了解一下Razor视图引擎 如果对此有疑问的话可以借鉴 博客园博文:http://kb.cnblogs.com/page/96883/ 或 博客博文:http://ww ...
- 【下一代核心技术DevOps】:(七)持续集成Jenkins的应用(Aliyun Pipiline持续构建)
1. 前言 使用Jenkins比较好的就是可以在整个构建顺序中增加自定义的动作,比如构建成功给Leader发个邮件,给团队核心发个微信什么的. 当然最基本的核心还是它可以构建多种开发语言的项目,此类构 ...
- python-编码-15
ascii A : 00000010 8位 一个字节 unicode A : 00000000 00000001 00000010 00000100 32位 四个字节 中:00000000 00000 ...
- git常用命令点击查看
创建git项目仓库 $git init 配置个人登记信息,这样团队协作的时候,就可以看到哪个用户修改过哪些文件的 $git config --global user.name 'cfanbo' $gi ...
- shiro课程的学习
1.shiro的课程目标 (1)shiro的整体框架 各组件的概念 (2)shiro 认证 授权的过程 (3)shiro自定义的Reaml Filter (4)shiro session 管理 (5) ...
- octave基本指令2
octave基本指令2 数据移动 >> pwd %显示出当前路径 ans C:\Octave\3.2.4_gcc-4 >> cd 'G:\machine learning' % ...
- GCP试用到期再申请
目标 GCP的免费试用到期了.网传可以续用,看了教程,记录下来. 法一 应该可以直接用一个新gmail账号的.这个方法的难点可能在于注册新账号有门槛.我有一个很久以前注册过的,试着找回了密码,登入GC ...
- 关于gzip zgrep zcat 的使用
最近由于重构代码,要判断很多接口是否还在使用,然后就要从现在已有日志里面去找 是否还有调用.我很疑惑,如果要一个一个文件从文件系统里面拷贝出来然后再使用grep cat vi 等方法去查找该有多麻烦. ...
- jmeter作用域规则
创建测试计划时,会创建一个有序的一系列将要被执行的请求列表,这些请求通常被组织在有序的控制器下 一些控制器会影响包含在它下面的请求顺序 ,这些特殊的控制器可以参考这里:the component re ...
- delphi7调用数据库连接属性
背景:连接数据库用ADOQuery控件,但是程序一旦编译完成,如果想更改数据库连接设置还得重新修改ADOQuery的属性重新编译 如果可以在程序中可以随时设置ADOQuery的属性则会方便很多. 实现 ...