Contest 155

2019-09-27 22:39:24

总体感受:这次比赛心态不够好,最后导致没有很好的完成比赛。

注意点

1)保持心态稳定,是情商的体现;

2)hard题的覆盖还是明显不够;

  • 1201. Ugly Number III

问题描述:

问题求解:

本体中的数据规模已经决定了使用O(n)的解法是肯定会超时的。那么自然而然就是使用二分查找了。

这里有个地方需要注意的是数字超过limit,需要转成long进行计算。

另外,二分以后一律采用模版lower_bound计算。

    public int nthUglyNumber(int n, int a, int b, int c) {
        int l = 0;
        int r = (int)(2 * 1e9);
        while (r - l > 1) {
            int mid = l + (r - l) / 2;
            int num = get_cnt(mid, a, b, c);
            if (num >= n) r = mid;
            else l = mid;
        }
        return r;
    }
    
    private long gcd(long x, long y) {
        return y == 0 ? x : gcd(y, x % y);
    }
    
    private long lcm(long a, long b) {
        return a * b / gcd(a, b);
    }
    
    private int get_cnt(long n, long a, long b, long c) {
        return (int)(n / a + n / b + n / c - n / lcm(a, b) - n / lcm(a, c) -  n / lcm(b, c) + n / lcm(a, lcm(b, c)));
    }

猜你喜欢

转载自www.cnblogs.com/hyserendipity/p/11600859.html
155