GCD Compression
题目链接:GCD Compression
题目大意:
一个数组A右2n个数,现在要把它压缩到n-1个数,首先选两个数丢掉,然后可以进行如下操作,从A中选两个数,将它们的和加入到数组B,知到A中为空,要求最后B数组中元素gcd大于一。
思路:
首先想到让B中所有数为偶数,即gcd为2,两个奇数相加为偶数,两个偶数相加为偶数,分别记录所有的偶数和奇数的下标,然后输出个n-1对数即可
参考代码:
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int main() { 6 int t,n; 7 cin >> t; 8 while(t--) { 9 cin >> n; 10 vector<int> even,odd; 11 for(int i = 1; i <= n*2; i++) { 12 int x; 13 cin >> x; 14 if(x & 1) odd.push_back(i); 15 else even.push_back(i); 16 } 17 vector< pair<int,int> > ans; 18 for(int i = 0; i+1 < odd.size(); i+=2) { // 这里写成i < odd.size()-1会RE,下面那个情况相同,原因未知 19 ans.push_back({odd[i],odd[i+1]}); 20 } 21 for(int i = 0; i+1 < even.size(); i+=2) { 22 ans.push_back({even[i],even[i+1]}); 23 } 24 for(int i = 0; i < n-1; i++) { 25 cout << ans[i].first << " " << ans[i].second << endl; 26 } 27 } 28 return 0; 29 }

浙公网安备 33010602011771号