https://ac.nowcoder.com/acm/contest/7852/E
技巧:枚举分母找分子,然后用上取整和下去整判断,不断减小误差,增加精度。

#include<bits/stdc++.h>

using namespace std;

const int maxn=100005;
typedef double db;
const db eps=1e-12;

inline db readb()
{   
    int f=1;db x=0;char s=getchar();
    for( ;!isdigit(s);s=='-' && (f=-1),s=getchar());
    for( ;isdigit(s);x=x*10+s-48,s=getchar());
    if( s=='.' ) for( db l=0.1,s=getchar();isdigit(s);x=x+(s-48)*l,l/=10,s=getchar() );
    return x*f;
}
int sgn( double d ) { return (d>eps)-(d<-eps); }; // 精度判断 

struct node{
    db l,r;
    bool operator < ( const node &rhs )const{ return l<rhs.l; };
}p[maxn],tmp[maxn];

int n;

bool check( db x )
{
    db now=0;
    for( int i=1;i<=n;i++ )
    {
        if( p[i].r-x+eps<now ) return false;
        now=max(p[i].l,now)+x;
    }
    return true;
}



int main()
{
    n=readb();
    db mins=1000000;
    for( int i=1;i<=n;i++ )
    {
        p[i].l=readb(),p[i].r=readb();
        mins=min(mins,p[i].r-p[i].l);
    }
    sort(p+1,p+1+n);
    db ls=0,rs=mins;
    while( rs-ls>=eps )
    {
        db mid=(ls+rs)/2;
        if( check(mid) ) ls=mid;
        else rs=mid;
    }
    db ep=1.0;
    int mi=0,mu=0;
    for( int i=1;i<=100000;i++ )
    {
        if( sgn(ls*i - (db)ceil(ls*i))==0 )
        {
             mi=ceil(ls*i);
             mu=i;
             ep=fabs( ls*i - (db)ceil(ls*i) );
        }
        if( sgn(ls*i - (db)floor(ls*i))==0 )
        {
             mi=floor(ls*i);
             mu=i;
             ep=fabs( ls*i - (db)floor(ls*i) );
        }

    }
    cout<<mi<<"/"<<mu<<"\n";


}