2025/12/28 9:34:59
网站建设
项目流程
做电影网站需要哪些证,深圳网络推广平台,网站建设维护员是做什么的,拉企业做网站好干吗题目描述
有一个长度为n的数列a#xff0c;它可以生成一个n∗n的数表#xff0c;数表的第i行第j列存放的数字是gcd(a[i],a[j]) #xff08;即a[i]和a[j]的最大公因数#xff09;。 举个例子#xff0c;上面那个表#xff0c;就是由数列a[]{4,3,6,2}生成的。
现在我们要…题目描述有一个长度为n的数列a它可以生成一个n∗n的数表数表的第i行第j列存放的数字是gcd(a[i],a[j]) 即a[i]和a[j]的最大公因数。举个例子上面那个表就是由数列a[]{4,3,6,2}生成的。现在我们要做这样一件事情将这个数表中的这n∗n 个数打乱得到一个长度为n∗n的序列(可参考样例1)。在已知这个序列的情况下请还原出数列a。输入格式第一行是一个整数n1≤n≤500代表的是原数列a的长度。第二行是n∗n个整数均不超过109且均为正数代表打乱之后的数表的元素。保证有解。输出格式共一行n个整数即您还原出的数组a中的元素。数与数之间用一个空格分隔开。如果有多个这样的数列a满足题意只需要输出一组即可。显示翻译题意翻译输入输出样例输入 #1复制4 2 1 2 3 4 3 2 6 1 1 2 2 1 2 3 2输出 #1复制4 3 6 2输入 #2复制1 42输出 #2复制42输入 #3复制2 1 1 1 1输出 #3复制1 1代码实现#includebits/stdc.h using namespace std; int m,M,x[300005]; int c0,p[505]; mapint,int mp; void solve(){ cinm;Mm*m; for(int i1;iM;i) cinx[i]; sort(x1,xM1); reverse(x1,xM1); for(int i1;iM;i){ if(mp[x[i]]){mp[x[i]]--;continue;} p[c]x[i]; if(cm) break; for(int j1;jc;j) mp[__gcd(x[i],p[j])]2; } for(int i1;im;i) coutp[i] ; } int main(){ ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); solve(); return 0; }