博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[洛谷P3550][POI2013]TAK-Taxis
阅读量:6272 次
发布时间:2019-06-22

本文共 1063 字,大约阅读时间需要 3 分钟。

题目大意:一条路上有三个点,$0$为起始位置,$d$为总部,$m$为家。有$n$辆车,每辆车最多行驶$x_i$,都从$d$出发,可以在任意位置结束,问最少几辆车可以到家。

题解:贪心,发现当人在$[0,d)$时,车子越多,越浪费,所以尽可能用距离远的车。但这样也有可能导致最后没有车子从$d->m$,所以再最开始留下一辆可以的车。

注意判断只需要最后一辆车可以带到$m$,就可以结束循环,还有若无解,输出$0$,而非$-1$

卡点:无解输出了$-1$,应为$0$

 

C++ Code:

#include 
#include
#include
#define maxn 500010int n, ans;long long m, d, x;std::vector
s;int main() { scanf("%lld%lld%d", &m, &d, &n); for (int i = 0; i < n; ++i) { scanf("%lld", &x); s.push_back(x); } std::sort(s.begin(), s.end()); long long a = 0; if (m - d) { int p = std::lower_bound(s.begin(), s.end(), m - d) - s.begin(); if (p >= n) { puts("0"); return 0; } a = s[p]; s.erase(s.begin() + p); } std::reverse(s.begin(), s.end()); long long pos = 0, td = d - (a - m + d >> 1); for (long long i : s) { long long t = i - d + pos; if (t <= 0) { puts("0"); return 0; } pos += t; ++ans; if (pos >= td) break; } printf("%d\n", ans + (pos < m)); return 0;}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/10335784.html

你可能感兴趣的文章
通过kafka提供的命令来查看offset消费情况
查看>>
oracle数据库从入门到精通之四
查看>>
自定义圆形图片控件
查看>>
sharepoint 2013 补丁升级步骤
查看>>
asp.net core 2.0 web api基于JWT自定义策略授权
查看>>
Skype for Business Server 2015-04-前端服务器-3-安装-管理工具
查看>>
第12章代码《跟老男孩学习Linux运维:Shell编程实战》
查看>>
我们为什么从Python转到go?
查看>>
5.Azure负载均衡(上)
查看>>
轻松精通awk数组企业问题案例
查看>>
26.Azure备份服务器(下)
查看>>
从“网上说的能信么”说开去---学习的思考
查看>>
DHCP 日志分析
查看>>
.NET Micro Framework动态调用C/C++底层代码(原理篇)
查看>>
Windows Server 2012正式版RDS系列⒃
查看>>
Shell脚本之awk篇
查看>>
微软发布Azure Stack硬件需求
查看>>
python socket编程详细介绍
查看>>
Windows Server 2016第三个技术预览版新技术
查看>>
Everything 本地磁盘文件搜索工具下载!
查看>>