zoukankan      html  css  js  c++  java
  • codeforces_C. Sequence Transformation

    http://codeforces.com/contest/1059/problem/C

    题意:

    最初给一个1、2、3、……、n的序列,每次操作先将所有元素的最大公约数加入答案序列,然后在序列中任意删除一个数,一直重复至序列为空,求字典序最大的答案序列。

    思路:

    1、当n<4时,结果特判。当n>=4时,要使结果序列的字典序最大,那么必须尽快得到大于1的最大公约数,容易想到,2这个最大公约数是最快可以得到的,因为所有偶数都有2这个约数,先删除所有奇数,所得到的所有结果元素为1,这时候原序列所有元素的最大公约数为2。

    2、接着,因为总是想让字典序最大,那么就要尽快得到大于2的最大公约数,此时含公约数4的元素占序列中元素数量的一半。(2,4,6,8,10,12,14,16……),将公约数2提出,序列再次变为(1,2,3,4,5,6,7,8……),此时在偶数位上的元素都是含公约数4的元素,删除奇数位上的元素,结果序列加入结果元素2,删除完后,序列中所有元素均含后公约数4。依次类推,直至原序列元素个数<4。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            int all=n,tmp=1;
            while(all>3)
            {
                for(int i=0; i<all-all/2; i++)
                    printf("%d ",tmp);
                tmp*=2;
                all/=2;
            }
            if(all==1)
                printf("%d
    ",tmp);
            else if(all==2)
                printf("%d %d
    ",tmp,tmp*2);
            else
                printf("%d %d %d
    ",tmp,tmp,tmp*3);
        }
        return 0;
    }
  • 相关阅读:
    DOM官方文档学习总结
    python安装BeautifulSoup库解析HTML页面
    操作datatable数据
    aod.net连接字符串大全
    jqery对于select的操作
    希尔排序算法
    冒泡排序算法
    归并排序(分治法)
    随机函数
    【题解】LibreOJ #6279. 数列分块入门 3
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/9747664.html
Copyright © 2011-2022 走看看