2013 TCO Round 1A Medium(500) TheFrog

TheFrog

Xは最小なので、少なくとも1個のR[i]を通る。kを整数として、X=R[i]/kとなる。またXが1未満になることはない。そのようなXを列挙してpitに落ちないかを調べる。

#include <vector>
using namespace std;

class TheFrog{public:
double getMinimum( int D, vector <int> L, vector <int> R )
{
    int n = (int)L.size();

    double ans = D;
    for ( int i=0; i<n; i++ )
    {
        for ( int k=1; k<=R[i]; k++ )
        {
            double X = (double)R[i]/k;
            bool f = true;
            for ( int j=0; j<n && f; j++ )
                if ( int(L[j]/X+1e-9)!=int(R[j]/X-1e-9) )
                    f = false;
            if ( f )
                ans = min( ans, X );
        }
    }
    return ans;
}};