zoukankan      html  css  js  c++  java
  • codeforces 582A. GCD Table 解题报告

    题目链接:http://codeforces.com/problemset/problem/582/A

      网上很多题解,就不说了,直接贴代码= =

      官方题解:

      http://codeforces.com/blog/entry/20692

      

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <algorithm>
     6 #include <map>
     7 #include <vector>
     8 using namespace std;
     9 
    10 const int maxn = 500 + 5;
    11 map<int, int> cnt;
    12 vector<int> ans;
    13 int a[maxn*maxn];
    14 
    15 int GCD(int a, int b)
    16 {
    17     return b == 0 ? a : GCD(b, a%b);
    18 }
    19 
    20 int main()
    21 {
    22     int n;
    23     #ifndef ONLINE_JUDGE
    24         freopen("in.txt", "r", stdin);
    25     #endif // ONLINE_JUDGE
    26 
    27     while (scanf("%d", &n) != EOF) {
    28         ans.clear();
    29         for (int i = 0; i < n*n; i++) {
    30             scanf("%d", &a[i]);
    31             cnt[a[i]]++;
    32         }
    33 
    34         sort(a, a+n*n);
    35         for (int i = n*n-1; i >= 0; i--) {
    36             if (cnt[a[i]] <= 0) {
    37                 continue;
    38             }
    39             cnt[a[i]]--;
    40 
    41             for (int j = 0; j < ans.size(); j++) {
    42                 cnt[GCD(ans[j], a[i])] -= 2;
    43             }
    44             ans.push_back(a[i]);
    45         }
    46         for (int i = 0; i < ans.size(); i++) {
    47             cout << ans[i] << (i == ans.size()-1 ? '
    ' : ' ');
    48         }
    49     }
    50     return 0;
    51 }

    官方解法代码(个人比较喜欢这个)

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <map>
     6 using namespace std;
     7 
     8 const int maxn = 500 + 5;
     9 
    10 map<int, int> cnt;
    11 int ans[maxn];
    12 
    13 int gcd(int a, int b)
    14 {
    15     return b == 0 ? a : gcd(b, a % b);
    16 }
    17 
    18 int main()
    19 {
    20     int a, n;
    21 
    22     #ifndef ONLINE_JUDGE
    23         freopen("in.txt", "r", stdin);
    24     #endif // ONLINE_JUDGE
    25 
    26     while (scanf("%d", &n) != EOF) {
    27         for (int i = 0; i < n*n; i++) {
    28             scanf("%d", &a);
    29             cnt[-a]++;  // 为了将数组从大到小排序
    30         }
    31 
    32         int pos = n-1;
    33         for (map<int, int>::iterator mp = cnt.begin(); mp != cnt.end(); ++mp) {
    34             int x = -mp->first;
    35 
    36             while (mp->second) {   // 当次数还有的时候
    37                 ans[pos] = x;
    38                 --mp->second;
    39                 for (int i = pos+1; i < n; i++) {
    40                     cnt[-gcd(ans[i], x)] -= 2;
    41                 }
    42                 pos--;
    43             }
    44 
    45         }
    46         for (int i = 0; i < n; i++) {
    47             printf("%d%c", ans[i], (i == n-1 ? '
    ' : ' '));
    48         }
    49     }
    50     return 0;
    51 }
  • 相关阅读:
    Swift入坑系列—集合类型
    Java正则表达式入门
    Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)
    Swift之手势总结
    Matlab图像彩色转灰色
    HDU1754_I Hate It(线段树/单点更新)
    Cocos2d-x-lua游戏两个场景互相切换MainScene01切换到MainScene02
    freemarker自己定义标签(二)
    hibernate 在tomcat7.X 下配置mysql数据源
    WinCE隐藏显示任务栏,当任务栏隐藏时将其显示,当任务栏显示时将其隐藏(FindWindow,ShowWindow,IsWindowVisible),
  • 原文地址:https://www.cnblogs.com/windysai/p/4854825.html
Copyright © 2011-2022 走看看