HDU5248

来源:互联网 发布:js去掉数组中的空格 编辑:程序博客网 时间:2024/06/05 15:39

这是一道二分题,然而我做了好久都没有发现~~~
跟去年的跳石头有点相似,不断缩小范围:

#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define inf 100000000using namespace std;int a[100010],m,b[100010];int check(int x){    for(int i=1;i<=m;i++)b[i]=a[i];    b[1]-=x;    for(int i=2;i<=m;i++){        b[i]-=x;        if(b[i-1]>=b[i]){        if (abs(x-(b[i-1]-b[i]+1))<=x)b[i]=b[i-1]+1;else return 0;        }    }    return 1;}int main(){    int i,j,k,n,_,Case=0;    scanf("%d",&_);    while(_--){        Case++;        bool flag=0;        scanf("%d",&m);        scanf("%d",&a[1]);        for(i=2;i<=m;i++){            scanf("%d",&a[i]);            if(a[i]<=a[i-1])flag=1;        }        if(!flag){            printf("Case #%d:\n%d\n",Case,0);            continue;        }        int l=0,r=inf;        while(l<=r){            int mid=(l+r)/2;            if(check(mid))r=mid-1;            else l=mid+1;        }        printf("Case #%d:\n%d\n",Case,l);    }    return 0;}
0 0
原创粉丝点击