Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <set>
- #include <map>
- #define all(a) a.begin(), a.end()
- #define rall(a) a.rebgin(), a.rend()
- #define SOLVE int t; cin >> t; while (t--) solve();
- using namespace std;
- int gcd(int a, int b) {
- if (b == 0)
- return a;
- return gcd(b, a % b);
- }
- void solve() {
- int n;
- cin >> n;
- vector<int> a(n);
- for (int i = 0; i < n; ++i)
- cin >> a[i];
- vector<pair<int, int>> next(n);
- for (int i = 0; i < n; ++i)
- next[i] = {(i - 1 + n) % n, (i + 1) % n};
- set<pair<int, int>> q;
- for (int i = 0; i < n; ++i) {
- if (gcd(a[i], a[(i + 1) % n]) == 1) {
- q.insert({0, i});
- ++i;
- }
- }
- vector<int> ans;
- vector<int> used(n);
- while (q.size()) {
- auto z = *q.begin();
- q.erase(z);
- if (used[z.second])
- continue;
- int v = next[z.second].second;
- used[v] = 1;
- ans.push_back(v);
- next[z.second].second = next[v].second;
- next[next[v].second].first = z.second;
- if (gcd(a[z.second], a[next[z.second].second]) == 1) {
- q.insert({z.first + 1, z.second});
- }
- }
- cout << ans.size() << ' ';
- for (int i : ans)
- cout << i + 1 << ' ';
- cout << '\n';
- }
- signed main() {
- ios_base::sync_with_stdio(0);
- cout.tie(0);
- cin.tie(0);
- SOLVE
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement