10.4
CF 582A GCD Table
贪心取最大。熟悉set大法。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <vector> 6 #include <set> 7 using namespace std; 8 multiset<int> S; 9 multiset<int>::iterator it; 10 vector<int> ans; 11 12 int gcd(int a,int b) 13 { 14 return a%b?gcd(b,a%b):b; 15 } 16 17 int main(void) 18 { 19 S.clear(); 20 int n; scanf("%d",&n); 21 for(int i=0;i<n*n;i++) 22 { 23 int x; 24 scanf("%d",&x); 25 S.insert(x); 26 } 27 while(!S.empty()) 28 { 29 it=S.end(); it--; 30 int cur=*it; 31 S.erase(it); 32 for(int i=0;i<ans.size();i++) 33 { 34 int t=gcd(ans[i],cur); 35 for(int i=0;i<2;i++) 36 { 37 it=S.find(t); 38 S.erase(it); 39 } 40 } 41 ans.push_back(cur); 42 } 43 for(int i=0;i<ans.size();i++) printf("%d ",ans[i]); 44 puts(""); 45 return 0; 46 }
Aguin
时间: 2024-10-29 19:06:05