Finite Encyclopedia of Integer Sequences

本文介绍了一道关于无限整数序列百科全书(FEIS)的算法题目,目标是在所有长度为N且由1到K的整数组成的序列中找到第(X/2)个字典序最小的序列。文章提供了完整的解析过程及代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

 

转载于:https://www.cnblogs.com/lemon-jade/p/9417407.html

有限创新速率(finite-rate-of-innovation)是指在一定时间内创新的速率有限。这个概念最早由Mathe Zibulevsky等人提出,并应用于信号处理中的稀疏表示算法。 在稀疏表示算法中,通常假设信号是以某些基向量的线性组合表示的,而稀疏表示算法的目标就是通过选择尽量少的基向量来近似原始信号。然而,如果信号的创新速率较高,即信号中出现的细节和特征的变化较快,那么传统的稀疏表示算法可能无法精确地捕捉到信号中的全部信息。 有限创新速率的概念是为了解决这个问题。它假设信号在一段时间内的变化相对较慢,并且引入了一种慢变化模型,即假设信号的创新速率是有限的。在这种情况下,可以通过在信号的表示中引入一些先验知识和约束条件,来提高稀疏表示的准确性。这些约束条件可以是基于信号本身的性质,也可以是来自外部领域知识的先验信息。 有限创新速率的概念在稀疏表示算法中被广泛应用,并且在信号处理和图像处理等领域取得了很好的效果。它提供了一种有效的方法来处理变化较快的信号,提高信号表示的精度和稳定性。同时,由于引入了先验知识和约束条件,这种方法也可以有效地减少所需的计算量和存储空间,提高算法的效率和实用性。 有限创新速率的概念在现代科学和工程中具有一定的重要性,它为我们理解和处理快速变化的信号提供了有益的思路和方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值