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

Posted gaudar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM/ICPC 2018亚洲区预选赛北京赛站网络赛相关的知识,希望对你有一定的参考价值。

题意:到一个城市得钱,离开要花钱。开始时有现金。城市是环形的,问从哪个开始,能在途中任意时刻金钱>=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亚洲区预选赛北京赛站网络赛的主要内容,如果未能解决你的问题,请参考以下文章

ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 ASaving Tang Monk II 状态搜索

ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II(优先队列广搜)

2018亚洲区预选赛北京赛站网络赛 C.Cheat

2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II BFS

2018ACM/ICPC 焦作网络预选赛-A Magic Mirror

2014ACM/ICPC亚洲区北京站题解