553B - Kyoya and Permutation - CodeForces Solution


binary search combinatorics constructive algorithms greedy implementation math *1900

Please click on ads to support us..

Python Code:

fib=[0,1,1]
for i in range(3,51):
    fib.append(fib[-1]+fib[-2])
for i in range(1,51):
    fib[i]+=fib[i-1]
n,m=map(int,input().split())
ans=[0]*n
left=m
last=0
for i in range(n):
    if ans[i]!=0:
        continue
    for j in range(i+1,n+1):
        size=n-j
        if size==1:
            perms=1
        else:
            perms = fib[size - 1] + 1
        if perms>=left:
            ans[i]=j
            break
        else:
            left-=perms
    nlast=ans[i]
    t=i+1
    while(t<n and ans[t-1]!=last+1):
        ans[t]=ans[t-1]-1
        t+=1
    last=nlast
print(*ans)


Comments

Submit
0 Comments
More Questions

227B - Effective Approach
1534B - Histogram Ugliness
1611B - Team Composition Programmers and Mathematicians
110A - Nearly Lucky Number
1220B - Multiplication Table
1644A - Doors and Keys
1644B - Anti-Fibonacci Permutation
1610A - Anti Light's Cell Guessing
349B - Color the Fence
144A - Arrival of the General
1106A - Lunar New Year and Cross Counting
58A - Chat room
230A - Dragons
200B - Drinks
13A - Numbers
129A - Cookies
1367B - Even Array
136A - Presents
1450A - Avoid Trygub
327A - Flipping Game
411A - Password Check
1520C - Not Adjacent Matrix
1538B - Friends and Candies
580A - Kefa and First Steps
1038B - Non-Coprime Partition
43A - Football
50A - Domino piling
479A - Expression
1480A - Yet Another String Game
1216C - White Sheet