K.小沙的抱团easy

K.小沙的抱团easy

题目描述

小沙在玩一个抱团游戏,最开始有 n 个人,每次小沙会下达一次指令,要求以 x 人为单位抱团,每个人只能在一个团里,若一个人不属于某一个恰好 x 个人的团则将被淘汰,抱团需要所有参与抱团的人全部同意。假设参加游戏的人都足够聪明,都希望自己不被淘汰。如果你是小沙,你最少需要多少次指令才能使得剩余的人数最少。
每次要求拥抱人数不能超过当前人数,且每次拥抱人数均为正整数。例:剩余 5 人时不能要求 6 个人拥抱在一起,也不能要求 4.5个人拥抱在一起(怪)。

输入描述:

第一行输入一个整数 n ,\(1 \le n \le 10^{18}\)

输出描述:

输出一个整数代表小沙最少需要的指令次数。

输入

5

输出

2

说明

第一次可以下达指令 3 ,最后会存活 3 个人,随后下达指令 2 ,最后存活 2 人。可以发现无论如何,人数都不能再少。

思路点拨:

  • 签到题,贪心,每次除以2然后+1即可。

提交代码

#include <bits/stdc++.h>
using i64 = long long;

int main() 
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    i64 n;
    std::cin >> n;
    
    int ans = 0;
    while (n > 2) 
    {
        n = n / 2 + 1;
        ans++;
    }
    std::cout << ans << "\n";
    
    return 0;
}
posted @ 2023-02-24 22:48  哲远甄骏  阅读(30)  评论(0)    收藏  举报