bzoj 2632 [neerc2011]Gcd guessing game——贪心(存疑)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2632
官方题解:http://neerc.ifmo.ru/archive/2011/neerc-2011-analysis.pdf
如果答案是1,就需要猜质数次;把质数分组,一组一组猜就行了。一组就是最大的一个和最小的几个匹配。
然而既不知道为什么这样是最坏情况,也不知道为什么最大的一个和最小的几个匹配一定最优。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1e4+5; int n,pri[N],cnt,ans;bool vis[N]; int main() { scanf("%d",&n); for(int i=2;i<=n;i++) { if(!vis[i])pri[++cnt]=i; for(int j=1;j<=cnt&&i*pri[j]<=n;j++) { vis[i*pri[j]]=1; if(i%pri[j]==0)break; } } int p0=1; for(int i=cnt;i;i--) { if(p0>i)break; ans++;int ml=pri[i]; while(ml*pri[p0]<=n&&p0<i)ml*=pri[p0++]; } printf("%d\n",ans); return 0; }