测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A71880. 金币(coin)

编程题 入门

题目描述

n 个人在争夺一枚金币。

所有人排成一队,然后位于第 1,1+k,1+2k,\dots,1+(⌊n/k⌋−1)k 个的人被淘汰,这里 ⌊n/k⌋n 除以 k 上取整,上取整操作会将一个小数变成大于或等于它的最小整数,如 ⌊33/5⌋=⌊6.6⌋=7。重复这一操作,直到仅剩一个人。最终剩下的这个人获得这枚金币。

小 Y 是所有人中最聪明的。他想知道,要想最终获得金币,一开始他应该站在第几个位置?

输入格式

一行包含两个正整数 nk,表示总人数以及淘汰时用到的参数。

输出格式

输出一行一个整数,表示小 Y 应该处于的初始队列中的位置。

输入输出样例

输入 #1
6 2
输出 #1
4
输入 #2
8 3
输出 #2
8
输入 #3
10000 2
输出 #3
8192

说明/提示

样例输入 4

1919810 114514

样例输出 4

1919805

样例解释

对于样例 1n=6,起初,队列 =[1,2,3,4,5,6],因为 k=2,所以位于第 1,3,5 的人被淘汰,队列 =[2,4,6],然后位于第 1,3 的人被淘汰,队列 =[4],只剩下一个人,所以小 Y 一开始应该站在 4 号位置。

对于样例 2n=8,起初,队列 =[1,2,3,4,5,6,7,8],因为 k=3,所以位于 1,4,7 的人被淘汰,队列 =[2,3,5,6,8],然后位于 1,4 的人被淘汰,队列 =[2,5,8],然后位于 1 的人被淘汰,队列 =[5,8],然后位于 1 的人被淘汰,队列 =[8],只剩下一个人,所以小 Y 一开始应该站在 8 号位置。

数据范围

本题共有 12 个测试点,每个测试点 10 分。

对于全部测试点:2 \le n,k \le 10^{12}

对于测试点 1n=k=2

对于测试点 2-4n,k \le 1000

对于测试的 5-8k \le 1000000