题意:环形跑道上有n n<=100000 个加油站  编号为1-n  第i个加油站可以加油pi加仑   从加油站i开到下一站需要qi加仑   你可以选择一个加油站作为起点 初始油箱为空   如果可以走完一圈  那么输出最小的起始站点  否则输出-1

如果   对每个加油站作为起始点进行枚举的话  那么复杂度为 n^2

其中有一个重要的思路可以优化:

比如从第一个点最为起始点   如果能走一圈 那么就成了  第一个也为最小起始点

如果 走到t点   t到t+1走不了     那么 第2个点到 第t个点作为起始点 都是一定不可行的!!

接下来就将t+1作为起始点再次尝试遍历

#include<bits/stdc++.h>
using namespace std;
#define N 100001 int vis[N];
int p[N],q[N];//p为加油 q为油耗
int n; int go(int start)
{
int oil=p[start]-q[start];
if(oil<) return start;
for(int i=(start+)%n; i!=start;i=(i+)%n )
{
oil+=p[i]-q[i];
if(oil<)return i;
}
return N;
} int solve(void)
{
int start=;
memset(vis,,sizeof vis);
vis[]=;
for(;;)
{
int e=go(start);
if(e==N)return start;
start=e+;
if(vis[start])return -;
vis[start]=;
}
} int main()
{
int cas;cin>>cas;
for(int kase=;kase<=cas;kase++)
{
cin>>n;
for(int i=;i<n;i++)scanf("%d",&p[i]);
for(int i=;i<n;i++)scanf("%d",&q[i]); int ans=solve();
printf("Case %d: ",kase);
if(ans==-)printf("Not possible\n");
else printf("Possible from station %d\n",ans+);
}
return ;
}

LRJ的代码更快更巧妙!去掉了vis数组

// UVa11093 Just Finish it up
// Rujia Liu
#include<cstdio> const int maxn = + ;
int n, p[maxn], q[maxn]; // returns s if success
// otherwise, return the station you failed to reach
// if you failed to reach the start, return -1
int go(int s) {
int fuel = p[s] - q[s];
for(int i = (s+)%n; i != s; i = (i+)%n) {
if(fuel < ) return i;
fuel += p[i] - q[i];
}
if(fuel < ) return -; // this means sum(p) < sum(q), so this case is impossible
return s; // success
} int solve() {
int start = ;
for(;;) {
int finish = go(start);
if(finish < start) return -; // wrapped around, or go(start) returns -1
if(finish == start) return start;
start = finish;
}
} int main() {
int T;
scanf("%d", &T);
for(int kase = ; kase <= T; kase++) {
scanf("%d", &n);
for(int i = ; i < n; i++) scanf("%d", &p[i]);
for(int i = ; i < n; i++) scanf("%d", &q[i]);
int ans = solve();
printf("Case %d: ", kase);
if(ans < ) printf("Not possible\n");
else printf("Possible from station %d\n", ans+);
}
return ;
}

8-13 Just Finish it up uva11093的更多相关文章

  1. Java 8 Features – The ULTIMATE Guide--reference

    Now, it is time to gather all the major Java 8 features under one reference post for your reading pl ...

  2. 同一环境下新建Standby RAC库

    需求:在同一个环境下新建Standby RAC库,即和Primary RAC在相同的磁盘组. 说明:生产环境一般不建议这样配置DG,因为存储层面是相同磁盘组,灾备的实际意义不大.我这里是用作读写分离. ...

  3. Android中的线程池

    在Android中,主线程不能执行耗时的操作,否则可能会导致ANR.那么,耗时操作应该在其它线程中执行.线程的创建和销毁都会有性能开销,创建过多的线程也会由于互相抢占系统资源而导致阻塞的现象.这个时候 ...

  4. 创建 HelloWorld 项目

    在 Eclipse 的导航栏中点击 File →New →Android Application Project ,此时会弹出创建 Android 项目的对话框.其中 Application Name ...

  5. 在SQL Server里如何进行数据页级别的恢复

    在SQL Server里如何进行页级别的恢复 关键词:数据页修复 在今天的文章里我想谈下每个DBA应该知道的一个重要话题:在SQL Server里如何进行页级别还原操作.假设在SQL Server里你 ...

  6. OCP 11g 第四章练习

    练习 4-1 配置Oracle Net 在本练习中, 将使用图形化工具和命令行工具来建立一个完整的Oracle Net 环境. 由此, 读者可看出在Windows 和 Linux 系统中的区别. 1. ...

  7. ArcGIS Desktop10.4安装教程

    准备内容 安装环境:win10*64位专业版 安装文件:ArcGIS_Desktop_1041_150996.iso 破解文件:10.4.1crackOnly 请都以管理员身份运行安装程序 安装步骤 ...

  8. HeadFirst 13 (包装器, 过滤器) not Finish

    过滤器准许你拦截请求 容器管理过滤器的生命周期 都在DD中声明

  9. Mac OS X上IntelliJ IDEA 13与Tomcat 8的Java Web开发环境搭建

    这标题实在有点拗口,不知道怎么写好,但看了标题也就明白文本的内容.最近几天在折腾这些玩意儿,所以写写总结.除了环境搭建,本文还是一篇入门级的上手教程. 去下载一些东西 JDK安装 Tomcat安装 T ...

随机推荐

  1. 新建 Vue项目 使用iView报错解决

    错误如下: error in ./src/index.less Module build failed: // https://github.com/ant-design/ant-motion/iss ...

  2. Java并发编程原理与实战三十八:多线程调度器(ScheduledThreadPoolExecutor)

    在前面介绍了java的多线程的基本原理信息:线程池的原理与使用 本文对这个java本身的线程池的调度器做一个简单扩展,如果还没读过上一篇文章,建议读一下,因为这是调度器的核心组件部分. 我们如果要用j ...

  3. python 分布式进程体验

    抽了点时间体验了一把python 分布式进程,有点像分布式计算的意思,不过我现在还没有这个需求,先把简单体验的脚本发出来,供路过的各位高手指教 注:需要先下载multiprocessing 的pyth ...

  4. thinkphp 原数据更新

    调用TP的save方法更新数据时,如果新数据与数据库中得数据一致, 那么执行M('table')->save(data)方法时,该方法会返回false.现在的需求是,哪怕用户要更新的数据与原数据 ...

  5. Once you eliminate all the other factors,the only thing remaining must be the truth.

    Once you eliminate all the other factors,the only thing remaining must be the truth. 一旦你排除了杂因,剩下的一定是 ...

  6. 【Python项目】爬取新浪微博个人用户信息页

    微博用户信息爬虫 项目链接:https://github.com/RealIvyWong/WeiboCrawler/tree/master/WeiboUserInfoCrawler 1 实现功能 这个 ...

  7. 33 Introducing the Go Race Detector

    Introducing the Go Race Detector 26 June 2013 Introduction Race conditions are among the most insidi ...

  8. URL的井号

    2010年9月,twitter改版. 一个显著变化,就是URL加入了"#!"符号.比如,改版前的用户主页网址为 http://twitter.com/username 改版后,就变 ...

  9. 用js面向对象思想封装插件

    js是基于原型的面向对象语言,如果你学过java,c#等正统面向对象语言,你会难以理解js的面向对象,他和普通的面向对象不太一样,今天,我们通过封装一个toast插件,来看看js面向对象是如何运行的. ...

  10. 洛谷P1938 找工就业

    传送门啦 这个题本质就是跑一边最长路,重点就是在怎么建图上. 我们可以把点权放到边权上面,即将每一个边的终点点权当做这个边的边权,这个题里就是将工钱 $ d $ 当做边权. 如果这一条边需要坐飞机才能 ...