Finite Encyclopedia of Integer Sequences
阿新 • • 發佈:2018-08-04
HERE 題解 form state col cal std lec trigger
-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.
. The (12⁄2=6)-th lexicographically smallest one among them is (2,1).
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)
Sample Input 1
Copy3 2
Sample Output 1
Copy2 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)
Sample Input 2
Copy2 4
Sample Output 2
Copy1 2 2 2
Sample Input 3
Copy5 14
Sample Output 3
Copy3 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