码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces 8VC Venture Cup 2016 - Elimination Round C. Lieges of Legendre

时间:2016-02-26 23:31:12      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

C. Lieges of Legendre

题意:给n,m表示有n个为2的倍数,m个为3的倍数;问这n+m个数不重复时的最大值 最小为多少?

数据:(0 ≤ n, m ≤ 1 000 000, n + m > 0)
ps:很水的题,主要是策略;

思路:由于里面每隔6就会重复一次,不好直接模拟,并且模拟的效率很低,那就二分吧!二分即上界为2单独的最大倍数与3单独时的最大倍数之和,下界为前面二者的max;之后利用判断是否mid/2 >= n && mid/3 >= m && mid/2 + mid/3 - mid/6 >= n + m 即可二分;这样running 就是log(n)了;注意最后还要判断ans是否为2|3的积即可;

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    int l = max(n*2,m*3),r = n*2 + m*3,ans = 0;
    while(l <= r){
        int mid = l + r >> 1;
        if(mid/2 >= n && mid/3 >= m && mid/2 + mid/3 - mid/6 >= n + m) ans = mid,r = mid - 1;
        else l = mid + 1;
    }
    if(ans%2 != 0 && ans%3 != 0) ans++;
    printf("%d",ans);
    return 0;
}

 

codeforces 8VC Venture Cup 2016 - Elimination Round C. Lieges of Legendre

标签:

原文地址:http://www.cnblogs.com/hxer/p/5222021.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!