蓝桥杯-算法赛第9场强者:贝贝的2.0

题意:n个节点的有根树,问孩子节点最少是多少,可以满足任意两条长度为k的链有公共节点。

思路:一开始想的是以根为中间点,然后构造边。但是发现样例过不了,样例说的很清楚,根节点也作为一个叶子节点去构造,然后把叶子节点作为中间点(这样可以省去一个叶子节点的计数)。最后就是如何处理的问题,如果刚好k 整除 n - 1,那么答案就是(n - 1) / k - 1。如果不能整除,那就要向上取个整。

总结:太久没刷思维题了,有点抽象,难。

void solve(){
    long long n, k;
    cin >> n >> k;

    if (n - 1 <= k){
        cout << 1 << '\n';
    }
    else if ((n - 1) % k == 0){
        cout << (n - 1) / k - 1 << '\n';
    }
    else{
        cout << (n - 1) / k << '\n';
    }
}
posted @ 2024-04-08 09:58  _Yxc  阅读(21)  评论(0)    收藏  举报