题目链接 http://codeforces.com/problemset/problem/729/C

题意:n个价格c[i],油量v[i]的汽车,求最便宜的一辆使得能在t时间内到达s,路途中有k个位置在g[i]的加油站,可以免费加满油,且不耗时间。每辆车有两种运行模式可以随时切换:1.每米一分钟两升油;2.每米两分钟一升油。

看到10^5次加上循环两次就想到二分或者线段树或者看错题意了。

这题二分查找一下汽油就可以了,找到最少多少汽油够到达,然后再for一遍找汽油量大的且价格便宜的车即可。

还有一些关系要注意一下的

t(min) = 不符合 (L > v[i])

= L (2 * L <= v[i])

= 3 * L - v[i] (L<=v[i]<2 * L)

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int M = 2e5 + 10;
typedef long long ll;
struct TnT {
int v , f;
}sl[M];
ll pos[M] , sp[M];
bool cmp(TnT a , TnT b) {
return a.f > b.f;
}
int main()
{
int n , k , s , t;
scanf("%d%d%d%d" , &n , &k , &s , &t);
for(int i = 0 ; i < n ; i++) {
scanf("%d%d" , &sl[i].v , &sl[i].f);
}
ll le = 0;
int temp = 0;
for(int i = 0 ; i < k ; i++) {
scanf("%I64d" , &pos[i]);
}
sort(pos , pos + k);
for(int i = 0 ; i < k ; i++) {
sp[temp++] = pos[i] - le;
le = pos[i];
}
if(pos[k - 1] != s) {
sp[temp++] = s - le;
}
sort(sl , sl + n , cmp);
int l = 0 , r = n - 1;
int flag;
while(l <= r) {
int mid = (l + r) >> 1;
ll sum = 0;
flag = 0;
for(int i = 0 ; i < temp ; i++) {
ll gg = sp[i] * 3;
if(sl[mid].f < sp[i]) {
flag = 1;
break;
}
else {
if(2 * sp[i] <= sl[mid].f) {
sum += sp[i];
}
else {
sum += (gg - sl[mid].f);
}
flag = 0;
}
}
if(flag == 1) {
r = mid - 1;
continue;
}
if(sum > t) {
r = mid - 1;
}
else {
l = mid + 1;
}
}
if(l - 1 == -1) {
printf("-1\n");
}
else {
int MIN = sl[l - 1].v;
int cmper = sl[l - 1].f;
for(int i = 0 ; i < n ; i++) {
if(sl[i].f >= cmper) {
MIN = min(MIN , sl[i].v);
}
}
printf("%d\n" , MIN);
}
return 0;
}

最新文章

  1. Linux服务器安全登录设置记录
  2. Ceph剖析:Leader选举
  3. NAT功能的研究
  4. C++学习45 流成员函数put输出单个字符 cin输入流详解 get()函数读入一个字符
  5. SVN--(Eclipse)在历史记录中比较版本差异
  6. javascript insertBefore 和 appendChild
  7. C# 翻页设计:首页,上一页,下一页,末页 ,跳转
  8. Dev表格导出工具类 z
  9. 阿里大鱼simplexmlelement object 取值PHP
  10. Java学习之DAO设计模式
  11. spring异常记录-----java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
  12. 14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量
  13. Ubuntu上安装flashplayer
  14. CentOS在线安装RabbitMQ3.7
  15. js实现表格无缝滚动效果
  16. apm固定翼调试方法
  17. Java实验-课程设计报告一:个人银行账户管理系统SavingAccountManageSystem-具体文档+源码
  18. Hive错误:Error: FUNCTION &#39;NUCLEUS_ASCII&#39; already exists. (state=X0Y68,code=30000)
  19. $.post() 和 $.get() 如何同步请求
  20. java 数据类型与数据库 数据类型的对应关系

热门文章

  1. react开发中的小细节
  2. npm 一些有用的提示和技巧
  3. 【错误】【vscode】输出中文是乱码问题
  4. [NUnit]No results
  5. manifest.json 解析--手机web app开发笔记(三-2)
  6. hadoop2.7之作业提交详解(上)
  7. serverless在微店node领域的探索应用
  8. Element-UI 表单验证规则rules 配置参数说明
  9. Java并发之内存模型(JMM)浅析
  10. Ubuntu安装时出现“failed to load ldlinux.c32”