[vijos1763] wormhole

来源:互联网 发布:前端模块化编程 编辑:程序博客网 时间:2024/06/10 05:11

题目链接
题解:二分距离,局部不满足就放,由局部最优推出整体最优

#include <iostream>#include <cstdio>#include <cmath>#include <climits>using namespace std;#define INF INT_MAX-100000const int M=200005;int n,l,r,mid,T,ans,k;int w[M],d[M];void init(){    cin>>n;    for(int i=1;i<=n;i++){        scanf("%d",&w[i]);        d[i]=w[i]-w[1];    }}inline bool cl(int pos,int x){    for(k=pos;k<=n;k++)    if(w[k]-w[pos]>x) break;    for(int j=k;j<=n;j++)    if(w[j]-w[k-1]>x) return false;    return true;}bool ok(int x){    for(int i=2;i<=n;i++)    {        if(d[i]>x){            if(cl(i,x)) return true;            return false;        }    }    return true;}void work(){    l=1,r=INF;    while(l<=r){        mid=(l+r)>>1;        if(ok(mid))        r=mid-1,ans=mid;        else l=mid+1;    }    printf("%d\n",ans);}int main(){    //freopen("data.in","r",stdin);    //freopen("true.out","w",stdout);    cin>>T;    while(T--){        init();        work();    }}
0 0
原创粉丝点击