题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2257
可以知道最终能够导出的燃料一定是瓶子容量的gcd的倍数,所以此题转化为求n个数中k个数的最大gcd;
暴力枚举一下,放进优先队列里,取最大的、个数>=k个的因数即可。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; priority_queue<int>q; int n,v[1005],k; int main() { scanf("%d%d",&n,&k); for(int i=1,x;i<=n;i++) { scanf("%d",&x); for(int j=1;j*j<=x;j++) if(x%j==0)q.push(j),q.push(x/j); } while(q.size()) { int t=1; int x=q.top();q.pop(); while(x==q.top()&&q.size()) { t++;q.pop(); } if(t>=k) { printf("%d",x);return 0; } } printf("1"); return 0; }
本文介绍了一种求解n个数中k个数最大公因数(GCD)的算法,通过枚举并使用优先队列存储所有可能的公因数,最后筛选出满足条件的最大公因数。
1665

被折叠的 条评论
为什么被折叠?



