复健运动poj2431

题目大意:

  一头牛从起点到终点,最开始有P升油,每走一公里漏一升油,路途上有许多加油点,油箱容量为无穷大,求能到终点的最小加油次数。

《挑战程序设计竞赛》建议首先处理输入数据,使之成为到起点的距离。

优先队列练习

用优先队列存储路过的加油点的油。每次取用最大值,这样会使加油次数尽量减少。每取出一次就ans++.

值得注意的是:需要增加距离起点为l的点,保证最后一个加油点到终点能成功走到,因为有可能存在最后的油量走不到终点的情况,所以这个是必须要加的。【WA无数次在这里。

 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <queue>
 4 using namespace std;
 5 int n, tank, l, p, ans;
 6 struct node{
 7     int l, r;
 8 }a[10010];
 9 bool cmp(node a, node b){
10     return a.l < b.l;
11 }
12 int main(){
13     //freopen("1.in", "r", stdin);
14     while(~scanf("%d", &n)){
15             ans = 0, tank = 0;
16         for(int i = 1; i <= n; i++){
17             scanf("%d %d", &a[i].l, &a[i].r);
18         }
19         scanf("%d %d", &l, &p);
20         for(int i = 1; i <= n; i++)a[i].l = l - a[i].l;
21         n++;
22         a[n].l = l;a[n].r = 0;
23         sort(a+1,a+1+n, cmp);
24         int pos = 0;
25         tank = p;
26         priority_queue <int> q;
27         for(int i = 1; i <= n; i++){
28             int d = a[i].l - pos;
29             while(tank - d < 0){
30                 if(q.empty()){
31                     //printf("-1\n");
32                     ans = -1;
33                     break;
34                 }
35                 tank += q.top();
36                 q.pop();ans++;
37         }
38         if(ans == -1)break;
39             tank -= d;
40             pos = a[i].l;
41             q.push(a[i].r);
42         }
43         printf("%d\n", ans);
44     }
45 }
时间: 2024-10-10 09:52:43

复健运动poj2431的相关文章

[全是废话的日记]离梦醒还有82天,中老年退役选手复健之路

帮兴dalao劝小学妹,顺便收获了一波嘲讽,比如一个人闷头做题 我是真的不适合这种劝人的活啊,我只会开嘲讽怼回去 然后发现辣鸡兴大佬,天天就知道骂人家妹子,骂完了,妹子玻璃心,又开始疯狂找人劝,你当初别骂那么狠啊! 我现在心态爆炸了,我也想有学长劝. 好了,吐槽时间结束,开始伟大的复健之路,又称咸鱼不忍心白白死去的垂死挣扎. (不要相信这句话,我真的全篇都在吐槽一点干货都没留) 你们能相信我打一个动态规划,从19号22点,打到现在20号快1点还没打完吗. 真是复健之路艰辛啊,明天(实际上应该是今

复健计划

这里就是复健计划啦!虽然实际上我只是把以前的归档复制了一遍而已啦,当然我加了一些基础的东西在里面就是了. 计划打算在七月初开始(只要不咕). 感觉是在水博客啊……没事,应该没人看(滑稽) 学完的后面打个√. 图论 建图方法 最短路 生成树 拓扑排序 Tarjan相关 2-SAT 欧拉回路 虚树 圆方树 网络流/匈牙利算法 KM 最大流最小割 费用流 二分图匹配 上下界网络流 —————————————————————— 数论 筛法 gcd/exgcd 逆元 康托展开,卡特兰数,斯特林数 卢卡斯定

【读书笔记/复健向】算法竞赛入门经典训练指南1.1贪心部分

例题一(UVa11292) 基础贪心,没什么需要多讲的,直接放上代码.有一点要注意的是我第一遍写的时候竟然犯了两个错误. 错误点 将dragon.knight与i.j对应错误了,仔细一想人有先后对应的天性,下次设置i.j时还是老老实实根据输入顺序来,避免出错 第23行遗漏了(j<n)这个条件,使得在龙已经全被砍头的情况下却雇佣了剩余的骑士. 本题重点 砍龙头的时候设置两个指针,分别移动,使用频率挺高的一个小技巧,不难,但是挺重要的. 1 #include<iostream> 2 #inc

下你现场v那下次v成功的复健科

 http://www.djkk.com/blog/xzqjtw05 http://www.djkk.com/blog/mysong-4439957.html http://www.djkk.com/blog/mydiarry-4439957.html http://www.djkk.com/blog/myfav-4439957.html http://www.djkk.com/blog/zjmore-4439957.html http://www.djkk.com/blog/mypic-4

【读书笔记/解题报告/复健向】动态规划

<挑战程序设计竞赛>2.3.1(POJ3624/NOIP2004采药问题) 最基础的01背包问题,标程性质,又二维和一维两种写法. 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 using namespace std; 6 const int MAXN=3403; 7 int w[MAXN]; 8 int v[MAXN]; 9 int

复健小CM

系统 : Windows xp 程序 : Keygenme # 2 程序下载地址 :http://pan.baidu.com/s/1qYIk2HQ 要求 : 注册机编写 使用工具 : OD 可在“PEDIY CrackMe 2007”中查找关于此程序的讨论,标题为“一个据说是新手级Crackme的分析”. 运行程序,查找字符串定位关键算法位置.大致的看一下程序主体: 004014AF |. C74424 04 CE0>mov dword ptr [esp+4], 004400CE ; enter

噢耶肉体上的分就该的加萨克的恢复四复健科

http://f.dangdang.com/group/24297/953021/ http://f.dangdang.com/group/24297/953022/ http://f.dangdang.com/group/24297/953023/ http://f.dangdang.com/group/24297/953024/ http://f.dangdang.com/group/24297/953025/ http://f.dangdang.com/group/24297/953026

并不对劲的复健训练-p3674

题目大意 给出序列$ a_1,...,a_n $ ( $ n\leq10^5,a\leq 10^5 $ ),有\(m\) ( \(m\leq 10^5\))个以下三类询问: (1)给出\(l,r,k\)(\(k\leq 10^5\)),问是否存在\(x,y\)使\(x\in[l,r],y\in[l,r],a_x-a_y=k\) (2)给出\(l,r,k\)(\(k\leq 10^5\)),问是否存在\(x,y\)使\(x\in[l,r],y\in[l,r],a_x+a_y=k\) (3)给出\(

并不对劲的复健训练-bzoj5253:loj2479:p4384:[2018多省联考]制胡窜

题目大意 给出一个字符串\(S\),长度为\(n\)(\(n\leq 10^5\)),\(S[l:r]\)表示\(S_l,S_{l+1}...,S_r\)这个子串.有\(m\)(\(m\leq 3\times 10^5\))次询问,每次询问给出\(l,r\),问有多少对\((i,j)\)(\(1\leq i<i+1<j\leq n\)),使与\(S[l:r]\)本质相同的子串出现在\(S[1:i]\)中或\(S[i+1:j-1]\)中或\(S[j:n]\)中. 题解 询问相当于是问有多少种方案