Codeforces Round #651 (Div. 2) B. GCD Compression(数论)

题目链接:https://codeforces.com/contest/1370/problem/B

题意

给出 $2n$ 个数,选出 $2n - 2$ 个数,使得它们的 $gcd > 1$ 。 

题解

大于 $1$ 最好构造的 $gcd$ 就是 $2$ 了,根据奇偶将 $2n$ 个数分类,然后两个奇数一对,两个偶数一对即可。

代码

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

void solve() {
    int n; cin >> n;
    n *= 2;
    vector<int> v[2];
    for (int i = 1; i <= n; i++) {
        int x; cin >> x;
        v[x % 2].push_back(i);
    }
    if (v[1].size() & 1) {
        v[1].pop_back();
        v[0].pop_back();
    } else {
        if (v[0].size()) {
            v[0].pop_back();
            v[0].pop_back();
        } else {
            v[1].pop_back();
            v[1].pop_back();
        }
    }
    for (int i = 0; i < v[0].size(); i += 2)
        cout << v[0][i] << ' ' << v[0][i + 1] << "\n";
    for (int i = 0; i < v[1].size(); i += 2)
        cout << v[1][i] << ' ' << v[1][i + 1] << "\n";
}

int main() {
    int t; cin >> t;
    while (t--) solve();
}

 

上一篇:数据结构、算法与应用(C++描述)(第二版)第二章习题解答


下一篇:Java Map 中取最大与最小 Value 对应的Key值