题意:环形跑道上有N个加油站,编号为1~N。第 i 个加油站可以加油Ai加仑,从加油站 i 开到下一站需要Bi加仑汽油。问可作为起点走完一圈后回到起点的最小加油站编号。

解法:我们把每个加油站的Ai,Bi合并,把Ai-Bi看成N个点的权Ci,表示经过 i 的剩余油量。可知可通过第 i 个加油站就是sum{}+Ci>=0,sum{}表示从起点开到 i 之前剩余的油量,sum{}>=0。因此,若sum{}+Ci<0,那么从这时枚举的起点到 i 之间的所有点都不能作为起点,因为这时的sum{}已经是以他们为起点所能达到的最大值了,不可能有更多的油量剩余,一定不能通过点 i。便枚举 i+1 为起点,继续判断。

P.S.由于是环,判断走完一圈也有点麻烦,大家要小心。我觉得我打的虽然比较短,但也不是很优美。= =

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<algorithm>
5 #include<iostream>
6 #include<queue>
7 using namespace std;
8 const int N=100010;
9
10 int n;
11 int a[N],b[N];
12 int mmax(int x,int y) {return x>y?x:y;}
13 int check(int x)
14 {
15 int h=0,t=x;
16 bool tf=true;
17 while(1)
18 {
19 if (t==x&&!tf) return -1;
20 h+=a[t]-b[t];
21 if (h<0) return t;
22 tf=false;
23 t=(t+1)%n;
24 }
25 }
26 int main()
27 {
28 int T;
29 scanf("%d",&T);
30 for (int kase=1;kase<=T;kase++)
31 {
32 scanf("%d",&n);
33 for (int i=0;i<n;i++) scanf("%d",&a[i]);
34 for (int i=0;i<n;i++) scanf("%d",&b[i]);
35 int ans=n,x=0,tmp,mx=-1;
36 while (1)
37 {
38 if (x<=mx) break;
39 tmp=check(x),mx=mmax(mx,x);
40 if (tmp==-1) {ans=x;break;}
41 else x=tmp+1;
42 }
43 if (ans!=n) printf("Case %d: Possible from station %d\n",kase,ans+1);
44 else printf("Case %d: Not possible\n",kase);
45 }
46 return 0;
47 }

【uva 11093】Just Finish it up(算法效率--贪心)的更多相关文章

  1. 【uva 1617】Laptop(算法效率--贪心,2种理解)

    题意:有N条长度为1的线段,要求使每条线段分别在相应区间,且"空隙"数目最小.输出"空隙"数.(1≤N≤100000) 解法:(P.S.我这题竟做了2个多小时, ...

  2. 【uva 1615】Highway(算法效率--贪心 区间选点问题)

    题意:给定平面上N个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个店,都有一个选出的点离它的欧几里德距离不超过D. 解法:先把问题转换成模型,把对平面的点满足条件的点在x轴的直线上可得到 ...

  3. 【bzoj 3433】{Usaco2014 Jan} Recording the Moolympics(算法效率--贪心)

    题意:给出n个区间[a,b),有2个记录器,每个记录器中存放的区间不能重叠.求2个记录器中最多可放多少个区间. 解法:贪心.只有1个记录器的做法详见--关于贪心算法的经典问题(算法效率 or 动态规划 ...

  4. UVa 11093 Just Finish it up

    从第一个加油站开始枚举起点,如果到第i个加油站油量不够的话,那么1~i个加油站都不可能是起点. 将第i+1个加油站作为起点继续枚举. 比如说,第一个加油站开始最多跑到第5个加油站,那么第二个加油站不可 ...

  5. UVA 11093 Just Finish it up 环形跑道 (贪心)

    有一个环形跑道,上面有n个加油站,到i号加油站可以加pi的油,跑到下一站要花费qi的油,起点任意选,问是否有一个起点可跑完整个跑道. 从i开始跑,如果遇到某个站j不能跑了,那么从i到j之间的站开始跑, ...

  6. UVA - 11093 Just Finish it up(环形跑道)(模拟)

    题意:环形跑道上有n(n <= 100000)个加油站,编号为1~n.第i个加油站可以加油pi加仑.从加油站i开到下一站需要qi加仑汽油.你可以选择一个加油站作为起点,起始油箱为空(但可以立即加 ...

  7. 【uva 1312】Cricket Field(算法效率--技巧枚举)

    题意:一个 L*R 的网格里有 N 棵树,要求找一个最大空正方形并输出其左下角坐标和长.(1≤L,R≤10000, 0≤N≤100) 解法:枚举空正方形也就是枚举空矩阵,先要固定一个边,才好继续操作. ...

  8. 【uva 1153】Keep the Customer Satisfied(算法效率--贪心+优先队列)

    题意:有N个工作,已知每个工作需要的时间和截止时间.要求所有工作穿行完成,第一项任务开始的时间不早于时刻0.问最多能完成多少个工作.(N≤800000) 解法:贪心.可以模型化题目为:已知N个任务的长 ...

  9. 【uva 1614】Hell on the Markets(算法效率--贪心)

    题意:有一个长度为N的序列A,满足1≤Ai≤i,每个数的正负号不知.请输出一种正负号的情况,使得所有数的和为0.(N≤100000) 解法:(我本来只想静静地继续做一个口胡选手...←_← 但是因为这 ...

随机推荐

  1. MVC和MVVM的差别

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码 ...

  2. 【函数分享】每日PHP函数分享(2021-1-19)

    substr 函数返回字符串的一部分.注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0. string substr (string $string ...

  3. kubectl工具管理应用

    kubectl工具管理应用 创建一个pod [root@k8s-master ~]# kubectl run nginx --replicas=3 --labels="app=nginx-e ...

  4. 低功耗降线性稳压器,24V转5V降压芯片

    PW2330开发了一种高效率的同步降压DC-DC变换器3A输出电流.PW2330在4.5V到30V的宽输入电压范围内工作集成主开关和同步开关,具有非常低的RDS(ON)以最小化传导 损失.PW2330 ...

  5. Redis-第五章节-8种数据类型

    目录 一.Redis对key的操作 二.五种数据类型 String类型 List(集合) Set(集合) Hash(哈希) Zset(有序集合) 三.三种特殊数据类型 geospatial(地理位置) ...

  6. 在.NET Core 中实现健康检查

    .NET Core中提供了开箱即用的运行状况检查,首先,我将在.NET Core API应用程序中执行运行状况检查,接下来,我们将使用DbContext集成SQL Server或数据库的运行状况检查, ...

  7. CMOS 摄像头的Skipping 和 Binning 模式

    在通常的摄像头中,不同的resolution对应不同的帧率.想要提高帧率就要考虑是否需要缩小视野(FOV).若不希望视野缩小,就需要减少resolution. 常用的减少resolution的两种方式 ...

  8. MySQL中redo log、undo log、binlog关系以及区别

    MySQL中redo log.undo log.binlog关系以及区别 本文转载自:MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结 ...

  9. vue-cli快速创建项目,可视化创建

    之前学习了交互式创建,发现过程无聊,而且不方便,后面又学习了图形可视化创建,下面进行分享 1.打开cmd 2.输入vue ui,输入后会出现如下 C:\Users\12235>vue ui St ...

  10. Java Socket实战之七 使用Socket通信传输文件

    http://blog.csdn.net/kongxx/article/details/7319410 package com.googlecode.garbagecan.test.socket.ni ...