Hatena::Grouptopcoder

chokudaiの日記

 | 

2010-09-26

SRM 462 Div1 Easy

15:50 | SRM 462 Div1 Easy - chokudaiの日記 を含むブックマーク はてなブックマーク - SRM 462 Div1 Easy - chokudaiの日記 SRM 462 Div1 Easy - chokudaiの日記 のブックマークコメント

問題

省略

回答

2分探索で値を求めていく 0.0は認められないので注意

public class AgeEncoding {
    public double getRadix(int age, string candlesLine)
    {
        int i;
        double min = 0.0;
        double max = 200;
        double eps = 1e-9;

        if (Math.Abs(calc(candlesLine, min) - calc(candlesLine, max)) < eps)
        {
            if (Math.Abs(calc(candlesLine, min) - age) < eps) return -2.0;
            else return -1.0;
        }

        for (i = 0; i < 100; i++)
        {
            double mid = (min + max) / 2;
            double now = calc(candlesLine, mid);
            if (age <= now) max = mid;
            else min = mid;
        }

        if (min < eps) return -1.0;
        if (max > 101) return -1.0;

        return min;
    }

    double calc(string s, double a)
    {
        int i;
        double res = 0;
        for (i = 0; i < s.Length; i++)
        {
            if (s[s.Length - 1 - i] == '1')
            {
                res += Math.Pow(a, i);
            }
        }
        return res;
    }
}
 |