2257: [Jsoi2009]瓶子和燃料
阿新 • • 發佈:2018-11-09
題意:給你n個數字,然後讓你選出k個,這k個數字進行任意組合,問得到的最小結果是多少?
數學知識:
分析:根據題意得出數學公式:
那麼,如何在n個之中選出k個呢?其實不用選,因為直接計算各個因子,然後排序,如果第一個大於等於k就是答案。
#include<cstdio> #include<map> #include<cmath> using namespace std; map<int, int>ss; void fun(int num){ for (int i = 1; i <= sqrt(num); ++i){if (num%i == 0){ ss[i]++; if (i != num / i)ss[num / i]++; } } } int main(){ int n, m, x; while (scanf("%d%d", &n, &m) != EOF){ while (n--){ scanf("%d", &x); fun(x); } map<int, int>::iterator it = ss.end(); ss[0] = 0; for (--it; it != ss.begin(); --it){ // printf("%d -- %d\n", it->first, it->second); if (it->second >= m){ printf("%d\n", it->first); break; } } ss.clear(); } }