8-13 Just Finish it up uva11093
题意:环形跑道上有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的更多相关文章
- 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 ...
- 同一环境下新建Standby RAC库
需求:在同一个环境下新建Standby RAC库,即和Primary RAC在相同的磁盘组. 说明:生产环境一般不建议这样配置DG,因为存储层面是相同磁盘组,灾备的实际意义不大.我这里是用作读写分离. ...
- Android中的线程池
在Android中,主线程不能执行耗时的操作,否则可能会导致ANR.那么,耗时操作应该在其它线程中执行.线程的创建和销毁都会有性能开销,创建过多的线程也会由于互相抢占系统资源而导致阻塞的现象.这个时候 ...
- 创建 HelloWorld 项目
在 Eclipse 的导航栏中点击 File →New →Android Application Project ,此时会弹出创建 Android 项目的对话框.其中 Application Name ...
- 在SQL Server里如何进行数据页级别的恢复
在SQL Server里如何进行页级别的恢复 关键词:数据页修复 在今天的文章里我想谈下每个DBA应该知道的一个重要话题:在SQL Server里如何进行页级别还原操作.假设在SQL Server里你 ...
- OCP 11g 第四章练习
练习 4-1 配置Oracle Net 在本练习中, 将使用图形化工具和命令行工具来建立一个完整的Oracle Net 环境. 由此, 读者可看出在Windows 和 Linux 系统中的区别. 1. ...
- ArcGIS Desktop10.4安装教程
准备内容 安装环境:win10*64位专业版 安装文件:ArcGIS_Desktop_1041_150996.iso 破解文件:10.4.1crackOnly 请都以管理员身份运行安装程序 安装步骤 ...
- HeadFirst 13 (包装器, 过滤器) not Finish
过滤器准许你拦截请求 容器管理过滤器的生命周期 都在DD中声明
- Mac OS X上IntelliJ IDEA 13与Tomcat 8的Java Web开发环境搭建
这标题实在有点拗口,不知道怎么写好,但看了标题也就明白文本的内容.最近几天在折腾这些玩意儿,所以写写总结.除了环境搭建,本文还是一篇入门级的上手教程. 去下载一些东西 JDK安装 Tomcat安装 T ...
随机推荐
- Linux系统中连接使用NAS
在使用NAS时,需要先确定NAS上的NFS服务和SMB的服务都开启了: 然后需要用NAS上的用户去登录,这里用的是admin: # smbclient -L 192.168.1.40 -U admin ...
- [洛谷P4492] [HAOI2018]苹果树
洛谷题目链接:[HAOI2018]苹果树 题目背景 HAOI2018 Round2 第一题 题目描述 小 C 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 C ...
- python学习笔记4-内置函数、匿名函数、json处理
print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真 print(any([0,1,2,3,4]))#判断可迭代的对象里面的值是否有一个为真 print(bin(10))#十 ...
- c++虚函数&重写
虚函数是C++中实现多态的一种方法,父类A的一个函数声明为虚函数,在子类B中覆盖定义之后,当在调用的时候使用A*a=new B(),此时调用对应的那个虚函数的名字,则会执行B中的函数.当父类中没有定义 ...
- CSS3实战之box-sizing
一般我们都认为border和padding都包含在width或height之内. 而现代标准的浏览器一般都认为width和height仅仅包含content,刨去了border和padding区域. ...
- 【我们开发有力量之二】利用javascript制作批量网络投票机器人(自动改IP)
帮朋友忙网络投票,粗粗地看了下,投票没有什么限制,仅有一个ip校验:每天每个ip仅能投票一次. 也就是说,可以写一个程序,自动更换IP地址(伪造IP地址),实现批量刷票的目的.于是我写了一个投票机器人 ...
- codeforces997C Sky full of stars
传送门:http://codeforces.com/problemset/problem/997/C [题解] 注意在把$i=0$或$j=0$分开考虑的时候,3上面的指数应该是$n(n-j)+j$ 至 ...
- 微服务深入浅出(1)-- SpringBoot
基于Spring的开发框架,旨在简化配置快速开发,是新一代web开发框架.下面介绍一下常用的几个功能: 1.Spring单元测试 针对DAO层 (1) @RunWith(Spring.class),表 ...
- HDU 3790 最短路径问题 (最短路)
题目链接 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. ...
- std::max 错误
Today I typed the following: int t = (std::max)(timeout, lagtime); Why did I put parentheses around ...