洛谷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 ...
随机推荐
- Zabbix实战-简易教程--DB类--ClickHouse
一.ClickHouse介绍 Clickhouse是一个用于联机分析处理(OLAP)的列式数据库管理系统(columnar DBMS). 传统数据库在数据大小比较小,索引大小适合内存,数据缓存命中率足 ...
- 添加php的memcached扩展模块
memcached服务直接用yum安装[root@localhost ~]# yum install memcached 然后启动memcache服务,启动多个实例[root@localhost ~] ...
- JS中的跨域问题
一.什么是跨域? 1.定义:跨域是指从一个域名的网页去请求另一个域名的资源.比如从www.baidu.com 页面去请求 www.google.com 的资源.但是一般情况下不能这么做,它是由浏览器的 ...
- #个人博客作业week2——关于代码规范的个人观点
对于这一讨论的前提我们首先要知道什么是代码规范. 在这个问题上我同意一篇参考文章的观点——代码规范不仅只编码风格.编码风格仅是代码规范的一个方面,除了编码风格,代码规范还包括函数返回值等其他方面.在我 ...
- 个人作业week7——前端开发感想总结
个人作业week7——前端开发感想总结 1. 反思 首先要谈谈在这次团队项目的工作中,我这边出现过的较为严重的一个问题:我和HoerWing (后端担当)合作时,最初因为我没有使用github(始终连 ...
- Beta 冲刺 随笔合集
团队展示: Team一二一 Beta 冲刺 凡事预则立 Beta冲刺 一 Beta冲刺 二 Beta冲刺 三 Beta冲刺 四 Beta冲刺 五 Beta冲刺 六 Beta冲刺 七 Beta总结 用户 ...
- Jenkins and Python
https://jenkins.io/solutions/python/ In the Python ecosystem there are tools which can be integrated ...
- Weblogic 9.2和10.3 改密码 一站完成
Weblogic 9.2和10.3可通用,只需修改参照如下配置即可: SET BEA_HOME=F:\beaSET JRE_HOME=%BEA_HOME%\jdk150_04\binSET LIB_H ...
- CSS响应式网站开发
<html> <head> //当设备屏幕最大宽度小于1024px时加载如下CSS内容 @media screen and (max-width: 1024px){ ...
- ecshop2.73修改密码方法|ecshop2.73修改密码方法
ecshop2.73修改密码方法|ecshop2.73修改密码方法 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2012-09-09 ecshop2.73正式版后 ...