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

Finite Encyclopedia of Integer Sequences

时间:2018-08-04 11:38:32      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:graphic   copy   i++   scanf   length   lan   include   mod   points   

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?\n: );
    }
    else
    {
        for(int i = 1;i <= n;i++)
            printf("%d%c",i == 1?k/2:k,i == n?\n: );
    }
    return 0;
}

 

Finite Encyclopedia of Integer Sequences

标签:graphic   copy   i++   scanf   length   lan   include   mod   points   

原文地址:https://www.cnblogs.com/lemon-jade/p/9417407.html

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