51nod1671

Posted 宣毅鸣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod1671相关的知识,希望对你有一定的参考价值。

题解:

这一题感觉和noip2015d2t3一模一样,而且是弱化版

但是,后来发现貌似每两个点都可以建立虫洞

好在是i和i+1有边,所以就直接用二分+贪心了

代码:

#include<bits/stdc++.h>
const int N=1000005,inf=1<<30;
using namespace std;
int n,m,l[N],r[N];
bool check(int mid)
{
    int d1=-inf,d2=1<<30,c1=-inf,c2=1<<30;
    for(int i=1;i<=m;i++)
     {
        if(r[i]-l[i]<=mid) continue;
        d1=max(d1,l[i]+r[i]-mid);
        d2=min(d2,l[i]+r[i]+mid);
        c1=max(l[i]-r[i]-mid,c1);
        c2=min(l[i]-r[i]+mid,c2);
        if(d1>d2||c1>c2) return 0;
     }
    return 1;
}
int read()
{
    int x=0;char c;
    for (;c<0||c>9;c=getchar());
    for (;c>=0&&c<=9;c=getchar())x=x*10+c-48;
    return x;
}
int main()
{
    n=read();m=read();
    for(int i=1;i<=m;i++)
     {
         l[i]=read();r[i]=read();
         if (l[i]>r[i])swap(l[i],r[i]);
     }
    int l=0,r=n,ans=-1;
    while(l<r)
     {
        int mid=(l+r)/2;
        if(check(mid))r=mid;
        else l=mid+1;
     }
    printf("%d",l);
}

 

以上是关于51nod1671的主要内容,如果未能解决你的问题,请参考以下文章

货物运输 51Nod - 1671

51nod1563

51Nod1039 N^3 Mod P 数论 原根 BSGS

51nod1174(RMQ)

51nod1105(二分)

51nod 1179:最大的最大公约数