zoukankan      html  css  js  c++  java
  • 【CodeForces 626C】Block Towers

    给你n,m,如果 n个2的倍数和m个3的倍数,这n+m个数各不相同,那么求最大的数的最小值。

    分析

    方法1:枚举最大值为i,直到 i/2+i/3-i/6(不重复的2或3的倍数)≥n+m,并且要i/2(2的倍数)≥n,i/3(3的倍数)≥m。

    方法2:枚举重复的数字i,i最小为6,每次增加6,设置两个结尾初始值为2*n,3*m,当两个结尾都比i大时,那就是还有重复。然后加在比较短的结尾。直到不再有重复。

    代码

    方法1

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
        int n,m,i;
        scanf("%d%d",&n,&m);
        i=max(2*n,3*m);
        while(i/2+i/3-i/6<n+m||i/2<n||i/3<m)
        {
            i++;
        }
        printf("%d",i);
        return 0;
    }

    方法2

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
        int n,m,end1,end2;
        scanf("%d%d",&n,&m);
        end1=2*n;
        end2=3*m;
        for(int i=6; i<=min(end1,end2); i+=6)
        {
            if(end1<=end2)//如果相等,加到2的倍数,更小
            {
                end1+=2;
            }
            else
            {
                end2+=3;
            }
        }
        printf("%d",max(end1,end2));
        return 0;
    }
  • 相关阅读:
    2020 7 13 每日随笔
    2020 7 10 每日总结
    2020 7 14 每日总结
    2020 7 16 每日总结
    2020 7 15 每日总结
    2020 7 19 每日总结
    2020 7 18 每日总结
    2020 7 17 每日总结
    2020 7 11
    2020 7 12
  • 原文地址:https://www.cnblogs.com/flipped/p/5211688.html
Copyright © 2011-2022 走看看