Codeforces Round #323 (Div. 2) C. GCD Table
2018-03-27 15:29
323 查看
C. GCD Tabletime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputThe GCD table G of size n × n for an array of positive integers a of length n is defined by formula
![](http://codeforces.com/predownloaded/c4/11/c41174b207b1e8f3f5b51c6c0b2a1a479f9fd5ac.png)
Let us remind you that the greatest common divisor (GCD) of two positive integers x and y is the greatest integer that is divisor of both xand y, it is denoted as
![](http://codeforces.com/predownloaded/78/72/78721f5f6c09f3f26ba8570df31de2cac8da3df1.png)
. For example, for array a = {4, 3, 6, 2} of length 4 the GCD table will look as follows:
![](http://codeforces.com/predownloaded/30/61/306134769278f09384ca40efc6a5d981b18f3bb9.png)
Given all the numbers of the GCD table G, restore array a.InputThe first line contains number n (1 ≤ n ≤ 500) — the length of array a. The second line contains n2 space-separated numbers — the elements of the GCD table of G for array a.All the numbers in the table are positive integers, not exceeding 109. Note that the elements are given in an arbitrary order. It is guaranteed that the set of the input data corresponds to some array a.OutputIn the single line print n positive integers — the elements of array a. If there are multiple possible solutions, you are allowed to print any of them.ExamplesinputCopy
给你一堆数,是一个n*n矩阵包含的数,让你求一个arr 可以使当前arr中任何两个数求gcd 正好是给的矩阵的数,让你求出来这几个数。很显然应该从最大的开始,因为最大的肯定是一个,然后不断枚举最大值求gcd 没求出来一个删除2个 因为 a b 和 b a是一样的用map标记每个数字出现几次map<int,int>m;
priority_queue <int,vector<int>,less<int> > q;
int ans[505];
int main ()
{
int n;
scanf("%d",&n);
n=n*n;
int k=0;
for(int i=0;i<n;i++)
{
int temp;
scanf("%d",&temp);
if(m[temp]==0)
q.push(temp);
m[temp]++;
}
while(!q.empty())
{
int u=q.top();
ans[k]=u;
if(m[u]>0)
{
m[u]--;
for(int i=0;i<k;i++)
{
int v=__gcd(u,ans[i]);
m[v]=m[v]-2;
}
k++;
}
if(m[u]==0)
q.pop();
}
for(int i=0;i<k;i++)
{
if(i)
printf(" ");
printf("%d",ans[i]);
}
printf("\n");
return 0;
}
![](http://codeforces.com/predownloaded/c4/11/c41174b207b1e8f3f5b51c6c0b2a1a479f9fd5ac.png)
Let us remind you that the greatest common divisor (GCD) of two positive integers x and y is the greatest integer that is divisor of both xand y, it is denoted as
![](http://codeforces.com/predownloaded/78/72/78721f5f6c09f3f26ba8570df31de2cac8da3df1.png)
. For example, for array a = {4, 3, 6, 2} of length 4 the GCD table will look as follows:
![](http://codeforces.com/predownloaded/30/61/306134769278f09384ca40efc6a5d981b18f3bb9.png)
Given all the numbers of the GCD table G, restore array a.InputThe first line contains number n (1 ≤ n ≤ 500) — the length of array a. The second line contains n2 space-separated numbers — the elements of the GCD table of G for array a.All the numbers in the table are positive integers, not exceeding 109. Note that the elements are given in an arbitrary order. It is guaranteed that the set of the input data corresponds to some array a.OutputIn the single line print n positive integers — the elements of array a. If there are multiple possible solutions, you are allowed to print any of them.ExamplesinputCopy
4 2 1 2 3 4 3 2 6 1 1 2 2 1 2 3 2output
4 3 6 2inputCopy
1 42output
42inputCopy
2 1 1 1 1output1 1
给你一堆数,是一个n*n矩阵包含的数,让你求一个arr 可以使当前arr中任何两个数求gcd 正好是给的矩阵的数,让你求出来这几个数。很显然应该从最大的开始,因为最大的肯定是一个,然后不断枚举最大值求gcd 没求出来一个删除2个 因为 a b 和 b a是一样的用map标记每个数字出现几次map<int,int>m;
priority_queue <int,vector<int>,less<int> > q;
int ans[505];
int main ()
{
int n;
scanf("%d",&n);
n=n*n;
int k=0;
for(int i=0;i<n;i++)
{
int temp;
scanf("%d",&temp);
if(m[temp]==0)
q.push(temp);
m[temp]++;
}
while(!q.empty())
{
int u=q.top();
ans[k]=u;
if(m[u]>0)
{
m[u]--;
for(int i=0;i<k;i++)
{
int v=__gcd(u,ans[i]);
m[v]=m[v]-2;
}
k++;
}
if(m[u]==0)
q.pop();
}
for(int i=0;i<k;i++)
{
if(i)
printf(" ");
printf("%d",ans[i]);
}
printf("\n");
return 0;
}
相关文章推荐
- 【Codeforces Round #196 (Div. 1)】Codeforces 338D GCD Table
- codeforces #323 div 2 C. GCD Table (暴力?)
- Codeforces #323 div2 C. GCD Table 数论 构造
- 【Codeforces Round 323 (Div 2)C】【观察找规律 STL map】GCD Table 从GCD矩阵中找出所有原始元素
- CF#323-DIV2-C - GCD Table - 贪心GCD
- Codeforces Round #323 (Div. 2) C.GCD Table
- Codeforces Round #323 (Div. 2) C. GCD Table map
- Codeforces Round #323 (Div. 2) C. GCD Table 暴力
- Codeforces Round #323 (Div. 2) C. GCD Table 暴力
- Codeforces 583 DIV2 GCD Table 贪心
- div和table 用作布局的 区别
- Div和Table的区别
- 【转】iOS知识树,知识目录(包括对象、Block、消息转发、GCD、运行时、runloop、动画、Push、KVO、tableview,UIViewController、提交AppStore)
- 在IE8/FireFox下如何让div内的table垂直居中?[
- CSS+DIV网页重构比TABLE的优势
- DIV 里 table 居中的问题
- 如何让Div中的Table居中
- 【Codeforces Round 345 (Div 1) C】【并查集缩环+拓扑最长路】Table Compression nm矩形权值缩小大小关系不变
- CSS技巧,像table一样布局div
- 用div+css实现table效果