题解: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;
}
本文来自博客园,作者:cgy20140502,转载请注明原文链接:https://www.cnblogs.com/cgy20140502/p/23363494
不拿绿钩不改签,所有 WA 终会化为 AC!
浙公网安备 33010602011771号