zoukankan      html  css  js  c++  java
  • Finite Encyclopedia of Integer Sequences

    Time limit : 2sec / Memory limit : 256MB

    Score : 800 points

    Problem Statement

    In Finite Encyclopedia of Integer Sequences (FEIS), all integer sequences of lengths between 1 and N (inclusive) consisting of integers between 1 and K (inclusive) are listed.

    Let the total number of sequences listed in FEIS be X. Among those sequences, find the (X⁄2)-th (rounded up to the nearest integer) lexicographically smallest one.

    Constraints

    • 1≤N,K≤3×105
    • N and K are integers.

    Input

    Input is given from Standard Input in the following format:

    K N
    

    Output

    Print the (X⁄2)-th (rounded up to the nearest integer) lexicographically smallest sequence listed in FEIS, with spaces in between, where X is the total number of sequences listed in FEIS.


    Sample Input 1

    Copy
    3 2
    

    Sample Output 1

    Copy
    2 1 
    

    There are 12 sequences listed in FEIS: (1),(1,1),(1,2),(1,3),(2),(2,1),(2,2),(2,3),(3),(3,1),(3,2),(3,3). The (12⁄2=6)-th lexicographically smallest one among them is (2,1).


    Sample Input 2

    Copy
    2 4
    

    Sample Output 2

    Copy
    1 2 2 2
    

    Sample Input 3

    Copy
    5 14
    

    Sample Output 3

    Copy
    3 3 3 3 3 3 3 3 3 3 3 3 2 2 

    题解:偶数的时候很好弄,输出k/2,k...k,奇数的时候,对与k/2.k/2 ...k/2 这个序列 里中间最近,与中间相差n/2 (证明 or 官方题解)个,即往前模拟

    code:

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    const int N = 3e5 + 10;
    const int mod = 1e9 + 7;
    int a[N];
    int main()
    {
        int n,k;
        scanf("%d%d",&k,&n);
        if(k&1)
        {
            for(int i = 1;i <= n;i++)
                a[i] = (k+1)/2;
            int m = n;
            for(int i = 1;i <= n/2;i++)
            {
                if(a[m] == 1)
                    m--;
                else
                {
                    a[m]--;
                    for(int j = m + 1;j <= n;j++)
                        a[j] = k;
                    m = n;
                }
            }
            for(int i = 1;i <= m;i++)
                printf("%d%c",a[i],i == m?'
    ':' ');
        }
        else
        {
            for(int i = 1;i <= n;i++)
                printf("%d%c",i == 1?k/2:k,i == n?'
    ':' ');
        }
        return 0;
    }
  • 相关阅读:
    mock数据
    Vuex
    React生命周期
    Vue基础知识
    前端面试题
    NodeJS巅峰之作
    Oracle数据库
    CSS Bootstrap jsp开发 前端遇到的一些问题。
    如何寻找node.js 与win7兼容的版本?eclipse中引入bootstrap。
    Window 常用命令
  • 原文地址:https://www.cnblogs.com/lemon-jade/p/9417407.html
Copyright © 2011-2022 走看看