首页 > 其他 > 详细

Codeforces Round #323 (Div. 2) C GCD Table 582A

时间:2015-10-04 18:27:12      阅读:291      评论:0      收藏:0      [点我收藏+]

对角线上的元素就是a[i],而且在所在行和列中最大,

首先可以确定的是最大的元素一定是a[i]之一,这让人想到到了排序。

经过排序后,每次选最大的数字,如果不是之前更大数字的gcd,那么只能是a[i]之一。

div2路漫漫。。。

#include<bits/stdc++.h>
using namespace std;

typedef int ll;

ll a[501];
int g[501*501];
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; }
map<int,int> mp;

//#define LOCAL
int main()
{
#ifdef LOCAL
    freopen("in.txt","r",stdin);
#endif
    int n; scanf("%d",&n);
    int sz = n*n;
    for(int i = 0; i < sz; i++){
        scanf("%d",g+i);
    }
    sort(g,g+sz,greater<int>());

    int c = 0,j = 0;
    a[c++] = g[j++];
    for(int i = 1; i < n; i++){
        while(j<sz && mp[g[j]]){
            mp[g[j]]--;
            j++;
        }
        if(j == sz) break;
        for(int k = c-1; k >= 0; k--){
            mp[gcd(a[k],g[j])] += 2;
        }
        a[c++] = g[j++];
    }
    while(c--){
        printf("%d",a[c]);
        if(c) putchar( );
    }
    return 0;
}

 

Codeforces Round #323 (Div. 2) C GCD Table 582A

原文:http://www.cnblogs.com/jerryRey/p/4854787.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!