水题

xiaoxiao2021-02-28  49

题意:大陆是圆形的,在大陆的边缘有一条环形的道路,路上会有很多免费的天鹅肉领取处,假设第i个天鹅肉领取处可以领取gas[i]个天鹅肉

从第i个天鹅肉领取处到第i+1个天鹅肉领取处,我要吃掉cost[i]个天鹅肉,要是路途中没有足够的天鹅肉吃了,我就会动不了。所以我的要求就是:你帮我找到一个起点i,使我从第i个领取点出发,能绕大陆一圈后回到第i个领取点。没有输出 "-1".

代码:

#include<bits/stdc++.h> using namespace std; const int maxn=1e5+10; typedef long long ll; int gas[maxn]; int cost[maxn]; int pre[maxn*2]; int main(){ int n; while(~scanf("%d",&n)){ memset(gas,0,sizeof(gas)); memset(cost,0,sizeof(cost)); for(int i=0;i<n;i++){ scanf("%d",&gas[i]); gas[n+i]=gas[i]; } for(int i=0;i<n;i++){ scanf("%d",&cost[i]); cost[n+i]=cost[i]; } for(int i=0;i<2*n;i++) pre[i]=gas[i]-cost[i]; int l=0,r=1; int sum=pre[0]; int flag=0; int t; while(l<n){ if(r-l+1==n&&sum>=0){ t=l; flag=1; break; } if(sum<0){ sum-=pre[l]; l++; } else { sum+=pre[r]; r++; } } if(flag) printf("%d\n",t); else printf("-1\n"); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-2628878.html

最新回复(0)