bzoj2257瓶子与燃料——最大公约数

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

 

posted @ 2018-05-02 19:45  Zinn  阅读(121)  评论(0编辑  收藏  举报