题解:P17699 [ICPC 2019 Nanjing R] A Hard Problem

一篇给构造方法的题解。

先放答案,是 \(\lceil \frac{n}{2} \rceil + 1\)。

不正确思路

观察样例发现是 \(\lceil \frac{n}{2} \rceil + 1\),输出就对了。

正确思路

构造方法也很简单,首先把所以因子 \(2\) 提取出来,变成 \(2^a \times x\) 的形式,对于相同的 \(x\) 放在一同一条链上,这样可以保证每条链里,后面的数都是前面数的倍数,所以同一条链里任意两个数都满足一个是另一个的因子,而链首就是一个奇数。

构造完后对于每一条链,取一个数,目前的结果就是 \(\lceil \frac{n}{2} \rceil\),因为链首是奇数,而 \(1 \sim n\) 里有 \(\lceil \frac{n}{2} \rceil\) 个奇数,所以就有奇数条链,最后很容易知道,为了满足条件,再随便找一条链里选一个就行了。

实际上是先分组,再抽屉原理解决。

综上,答案就是 \(\lceil \frac{n}{2} \rceil + 1\)。

代码

#include <bits/stdc++.h>
using namespace std;
int t,n;
int main(){
    cin >> t;
    while (t--){
        cin >> n;
        cout << (n+1)/2+1 << "\n";//向上取整
    }
    return 0;
}
posted @ 2026-10-19 22:27  cgy20140502  阅读(5)  评论(0)    收藏  举报