码迷,mamicode.com
首页 > 其他好文 > 详细

ACM/ICPC 2018亚洲区预选赛北京赛站网络赛

时间:2018-10-05 12:17:02      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:证明   第一个   ios   一个开始   names   col   cst   code   bsp   

题意:到一个城市得钱,离开要花钱。开始时有现金。城市是环形的,问从哪个开始,能在途中任意时刻金钱>=0;

一个开始指针i,一个结尾指针j。指示一个区间。如果符合条件++j,并将收益加入sum中(收益可能是负数)。不符合就++i,并从sum中退掉收益直到sum>=0;区间长度为n时i的位置就是结果。

正确性证明:假设[a,b]是第一个合法区间。某时刻i,j都<a,i在a左边,因此j不可能扩到b右边(否则[a,b]不是第一个合法区间)。只可能j仍落在a左边,或者落到a,b中间。在i<a时,j不可能扩到b右边。j在a,b中间时,i不可能被退到a右边。

这样的尺取法以往还用来找和大于某值的最短连续区间。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstring>
#include <map>
#include <queue>
#include <set>
#include <cassert>
#include <stack>
using namespace std;
const double EPS=1e-8;
typedef long long lon;
const lon SZ=1000050,INF=0x7FFFFFFF;
lon arr[4*SZ],nex[SZ];

int main()
{
    std::ios::sync_with_stdio(0);
    //freopen("d:\\1.txt","r",stdin);
    lon casenum;
    cin>>casenum;
    //scanf("%d",&casenum);
    for(lon time=1;time<=casenum;++time)
    //for(lon time=1;scanf("%d%d",&n,&k)!=EOF;++time)
    {
        lon n,c;
        cin>>n>>c;
        for(lon i=1;i<=n;++i)cin>>arr[i];
        for(lon i=1;i<=n;++i)
        {
            cin>>nex[i];
            arr[i]-=nex[i];
        }
        for(int i=n+1;i<=2*n;++i)arr[i]=arr[i-n];
        int sum=0,cnt=0,bg=1;
        bool ok=0;
        for(int i=1;i<=2*n;++i)
        {
            if(sum+arr[i]+c<0)
            {
                for(;bg<=i&&sum+arr[i]+c<0;++bg)
                {
                    if(bg<i)sum-=arr[bg]; 
                }
                if(bg<=i)sum+=arr[i];
            }
            else
            {
                //if(bg==0)bg=i;
                sum+=arr[i];
                if(i-bg+1>=n)
                {
                    ok=1;
                    break;
                }
            }
        }
//        cout<<" "<<ok<<endl;
        if(ok)cout<<bg<<endl;
        else cout<<-1<<endl;
    }
    return 0;
}

 

ACM/ICPC 2018亚洲区预选赛北京赛站网络赛

标签:证明   第一个   ios   一个开始   names   col   cst   code   bsp   

原文地址:https://www.cnblogs.com/gaudar/p/9744332.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!