蓝桥杯-算法赛第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';
}
}

浙公网安备 33010602011771号