6617: Finite Encyclopedia of Integer Sequences
时间限制: 1 Sec 内存限制: 128 MB
提交: 379 解决: 92
[提交] [状态] [讨论版] [命题人:admin]
题目描述
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 is given from Standard Input in the following format:
K N
输出
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.
题意 给你k和n,让你用1-k这些数字最长为n进行字典序排列,然后让你去中间的那个序列
思路:当k为偶数时最好弄,直接就是中间序列的最后一个就是k/2kkkkk,
如果k是奇数的话
让k/2排成一个n的序列然后就发现这个序列和答案所要的中间的序列差n/2个只要往前找n/2个
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int a[300005];
int main()
{
ll k,n;
cin>>k>>n;
ll t=1;
int i,j;
if(k%2==0)
{
printf("%lld ",k/2);
for(i=1; i<n; i++)
printf("%lld ",k);
}
else
{
for(i=1; i<=n; i++)
a[i]=(k+1)/2;
int t=n;
for(i=1; i<=n/2; i++)
{
if(a[t]==1) t--;
else
{
a[t]--;
for(j=t+1; j<=n; j++)
a[j]=k;
t=n;
}
}
for(i=1; i<=t; i++)
printf("%d ",a[i]);
}
}