UVA 11093 Just Finish it up(模拟题)

题意:环形跑道给定n个加油站(n<=100000),编号从1到n,输入Pi表示第i个加油站可以加油Pi加仑,Qi表示第i到第i + 1个加油站消耗油量。初始油箱为空,求选择一个起点,使得可以走完一圈回到起点。如果无解输出Not possible,否则输出可以选择的最小起点。

思路:选择一号站,如果是,直接输出;如果不是,说明碰到某个加油站p,到p+1之间没油了。则有2、3、4……p一定不为解。因为在p到p+1肯定没油。直接枚举,复杂度为O(n)。

#include<cstdio>
int a[110000];
int b[110000];
int main(){
    int kase = 0, T;
    scanf("%d", &T);
    while(T--){
        int n;
        scanf("%d", &n);
        for(int i = 1; i <= n; i++)
            scanf("%d", &a[i]);
        for(int i = 1; i <= n; i++)
            scanf("%d", &b[i]);
        int ans = 0, ans1 = 0, flag = 1, p = 1;
        for(int i = 1; i <= n; i++){
            ans = ans + a[i] - b[i];
            if(ans < 0) { flag = 0; p = i + 1; ans1 += ans; ans = 0; }
        }
        printf("Case %d: ", ++kase);
        if(ans + ans1 >= 0)printf("Possible from station %d\n", p);
        else if(ans + ans1 < 0) printf("Not possible\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值