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;
}


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

相关文章推荐

CF582A GCD Table

题目链接:http://codeforces.com/problemset/problem/582/A A. GCD Table time limit per te...
  • ME495
  • ME495
  • 2015年11月10日 21:31
  • 296

Codeforces 583C/582A 暴力+gcd

A. GCD Table time limit per test 2 seconds memory limit per test 256 megabytes input standard inp...

codeforce 359D 二分+ 动态规划(sparse table)

原题链接:http://codeforces.com/problemset/problem/359/D 思路:首先对符合题目的长度(r-l)从0到n-1进行二分查找,对每一个长度进行check,看是...

[模板][数论][gcd+exgcd+sieve+power+euler_phi+euler_table+inv]

NOIP临近,,写写模板。。。求逆元: 扩展欧几里得求逆元 适用范围:常数小,适合单个求逆元 限制:gcd(a,n)==1#include #include #include #include ...
  • lfrun
  • lfrun
  • 2016年11月14日 22:14
  • 93

【莫比乌斯反演】[SPOJ-PGCD]Primes in GCD Table

题目 大意:给出一个数N,M,求1

SPOJ 4491 Primes in GCD Table(莫比乌斯反演)

题意:求[1,m]和[1,n]中gcd为素数的数对数量。 思路:这道题和hdu 4746有点像  传送门:http://blog.csdn.net/u014664226/article/detai...

Codeforces #323 div2 C. GCD Table 数论 构造

CF #323 div2 C/ div1 A

codeforces 338D GCD Table

扩展中国剩余定理

SPOJ - PGCD Primes in GCD Table - 莫比乌斯反演

题目描述1’.枚举prime#include #include using namespace std; #define MAXN 10000000 #define MAXP 800000int pr...

Codeforces Round #323 (Div. 1) A. GCD Table stl应用

A. GCD Table time limit per test2 seconds memory limit per test256 megabytes inputstandard input ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:codeforce 582 A. GCD Table
举报原因:
原因补充:

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