题目: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; }