给你$n$个有容量的瓶子 , 从中取出$k$个 , 使得取出的瓶子所能表达出的最小体积最大
根据裴蜀定理 , $k$个瓶子所可表达出的最小体积是其$Gcd$
找出$n$个桶子的因子出现次数 , 去最大的出现次数大于等于$k$的记为答案
$map$储存即可
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <map> 6 #include <cmath> 7 #define inc(i) (++ (i)) 8 #define dec(i) (-- (i)) 9 using namespace std; 10 11 const int N = 1000 + 7; 12 int n , k , A , Ans; 13 map <int , int> M; 14 15 int main() 16 { 17 scanf("%d%d" , &n , &k); 18 for(int i = 1 ; i <= n ; inc(i)) 19 { 20 scanf("%d" , &A); 21 for(int j = 1 , Max = sqrt(A) ; j <= Max ; inc(j)) 22 if(A % j == 0) 23 { 24 inc(M[j]) , inc(M[A / j]); 25 if(M[j] >= k) Ans = max(Ans , j); 26 if(M[A / j] >= k) Ans = max(Ans , A / j); 27 } 28 } 29 printf("%d" , Ans); 30 return 0; 31 }