codeforce 582 A. GCD Table

原创 2015年11月20日 21:23:24

显然矩阵中最大的那个数就是要求的数组中最大的那个数,所以首先把这个最大的数放到数组里去。

这里用 set 来存放矩阵中的数,因为 set 有插入数据时自动排序的功能,而且我们每次要取的数都是 set 中最大的数,所以用这种数据结构很方便。

取完第一个数后,要把这个数从 set 中删除,接下来的就是一个循环取最大数的过程了。

循环过程:

每取完一个最大数,先把这个数从set  中删除,然后删除所有已经取出来的数(也就是已经放到要求的数组中的数)和这个数的公因子,记住这里每个公因子要删两次,因为矩阵中本来就有重复的,比如 4 和 6 的最大公因子为2,矩阵中有 4 和 6 的公因子,也有 6 和 4 的公因子,而这两个值是一样的,由于set 自动排序,所以这两个相同的数肯定是挨着的,所以删的时候,连删两个就行。

代码如下;

#include <iostream>
#include <set>
using namespace std;
multiset<int> st;
int re[500];
int gcd(int m,int n)
{
	int r=m%n;
	while(r!=0)
	{
		m = n;
		n = r;
		r=m%n;
	}
	return n;
}
int main() 
{
	int n,nn,i,x,k=0;
	cin>>n;
	nn=n*n;
	for(i=0;i<nn;++i)
	{
		scanf("%d",&x);
		st.insert(x);
	}
	set<int>::reverse_iterator rit=st.rbegin();// 取最大的数 
	re[k++]=*(rit++);
	st.erase(rit.base());  // 删除这个最大数 
	set<int>::iterator beg;
	while(k<n)
	{
		rit=st.rbegin();  //循环取最大数 
		re[k]=*(rit++);   
		st.erase(rit.base());  // 删除这个最大数 
		for(i=0;i<k;++i)   //  对所有之前已经取完的数 
		{
			x = gcd(re[i],re[k]);   // 删除它们的最大公因子 
			beg=st.lower_bound(x);
			beg=st.erase(beg);   //删两次 
			st.erase(beg);
		}
		++k;
	}
	for(i=0;i<n;++i)
		printf("%d ",re[i]);
	return 0;
}


版权声明:本文为博主原创文章,欢迎大家转载,我们都是相互学习,共同进步。

Code Forces 582 A. GCD Table(数论)

Description 由n个数,可以构成n*n的gcd矩阵,无序的输入这n*n个数,然后让你找到这n个数,满足这个gcd矩阵 Input 第一行为一整数n表示数的个数,第二行n*n个整数表示这...
  • V5ZSQ
  • V5ZSQ
  • 2015年10月09日 22:44
  • 287

codeforce 582-A GCD Table

A. GCD Table time limit per test2 seconds memory limit per test256 megabytes inputstandard input ...
  • yeweiyang16
  • yeweiyang16
  • 2015年10月04日 23:24
  • 261

codeforces 803C Maximal GCD

题意:给你n,k(
  • exp1ore
  • exp1ore
  • 2017年04月29日 17:20
  • 555

Codeforces 778A-String Game

String Game time limit per test 2 seconds memory limit per test 512 megabytes input standard i...
  • a664607530
  • a664607530
  • 2017年02月27日 15:38
  • 305

Codeforces Round #460 (Div. 2)-A. Supermarket

A. Supermarkettime limit per test2 seconds memory limit per test256 megabytesProblem DescriptionWe ...
  • yopilipala
  • yopilipala
  • 2018年02月01日 14:21
  • 78

Codeforces Round #239 (Div. 2) C. Triangle(简单数学+暴力)

Codeforces Round #239 (Div. 2) C. Triangle(简单数学+暴力) C. Triangle time limit per test 1 second memory ...
  • sdjzping
  • sdjzping
  • 2014年03月30日 17:15
  • 1490

CodeForces - 582A GCD Table (map大数操作&gcd)好题

CodeForces - 582A GCD Table Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO For...
  • yanghui07216
  • yanghui07216
  • 2016年04月30日 16:42
  • 614

Codeforce GCD Table STL中的multisets

GCD Table time limit per test 2 seconds memory limit per test 256 megabytes input standa...
  • fans_ac
  • fans_ac
  • 2016年03月23日 20:53
  • 138

codeforce(找规律的简单题)

D. Prizes, Prizes, more Prizes time limit per test 2 seconds memory limit per test 256 megabytes...
  • ACMer_hades
  • ACMer_hades
  • 2015年04月22日 21:00
  • 952

CF 338 D GCD Table(CRT)

转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 给定一个序列,a[1 。。k],问是否存在(i...
  • ACM_cxlove
  • ACM_cxlove
  • 2013年08月18日 22:26
  • 2257
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:codeforce 582 A. GCD Table
举报原因:
原因补充:

(最多只允许输入30个字)