108272024-04-16 08:24:08TomaSajtSzimmetrikus sorozatcpp17Elfogadva 100/100194ms34320 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

vector<vector<int>> g;
vector<int> color, parent, depth;

int get_root(int u) {
  if (u == parent[u]) return u;
  return parent[u] = get_root(parent[u]);
}

vector<array<int, 2>> sol;

void merge(int u, int v, bool init) {
  u = get_root(u), v = get_root(v);
  if (u == v) return;
  if (!init) assert(color[u] != color[v]);
  if (depth[u] < depth[v]) swap(u, v);
  if (depth[u] == depth[v]) depth[u]++;
  int c1 = min(color[u], color[v]);
  int c2 = max(color[u], color[v]);
  color[u] = c1;
  parent[v] = u;
  if (init) return;
  sol.push_back({c2, c1});
}

signed main() {
  ios::sync_with_stdio(0), cin.tie(0);
  int n;
  cin >> n;
  parent.resize(n + 1);
  iota(parent.begin(), parent.end(), 0);
  depth.assign(n + 1, 1);
  color.resize(n + 1);
  map<int, int> col_map;
  for (int i = 1; i <= n; i++) {
    cin >> color[i];
    if (col_map.count(color[i])) {
      merge(col_map[color[i]], i, true);
    }
    else {
      col_map[color[i]] = i;
    }
  }

  for (int i = 1; i <= n; i++) {
    int j = n - i + 1;
    if (j <= i) break;
    merge(i, j, false);
  }

  cout << sol.size() << endl;
  for (auto [a, b] : sol) cout << a << ' ' << b << '\n';
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1700 KiB
2Elfogadva75ms14608 KiB
subtask29/9
3Elfogadva3ms2396 KiB
4Elfogadva3ms2492 KiB
5Elfogadva3ms2768 KiB
6Elfogadva3ms2652 KiB
7Elfogadva3ms2940 KiB
subtask314/14
8Elfogadva3ms2924 KiB
9Elfogadva2ms3004 KiB
10Elfogadva3ms3132 KiB
11Elfogadva3ms3368 KiB
12Elfogadva3ms3572 KiB
13Elfogadva3ms3660 KiB
subtask425/25
14Elfogadva3ms3660 KiB
15Elfogadva3ms3988 KiB
16Elfogadva4ms4436 KiB
17Elfogadva4ms4692 KiB
18Elfogadva4ms4472 KiB
19Elfogadva4ms4616 KiB
20Elfogadva4ms4568 KiB
21Elfogadva4ms4648 KiB
subtask522/22
22Elfogadva123ms28324 KiB
23Elfogadva129ms30376 KiB
24Elfogadva134ms30320 KiB
25Elfogadva119ms28252 KiB
26Elfogadva122ms28292 KiB
27Elfogadva125ms30476 KiB
28Elfogadva128ms30556 KiB
29Elfogadva115ms28488 KiB
30Elfogadva103ms28656 KiB
31Elfogadva109ms30744 KiB
32Elfogadva114ms30752 KiB
33Elfogadva97ms28704 KiB
34Elfogadva83ms28704 KiB
35Elfogadva98ms30904 KiB
36Elfogadva100ms30900 KiB
37Elfogadva86ms28696 KiB
subtask630/30
38Elfogadva3ms4824 KiB
39Elfogadva82ms17568 KiB
40Elfogadva3ms2396 KiB
41Elfogadva3ms2492 KiB
42Elfogadva3ms2768 KiB
43Elfogadva3ms2652 KiB
44Elfogadva3ms2940 KiB
45Elfogadva3ms2924 KiB
46Elfogadva2ms3004 KiB
47Elfogadva3ms3132 KiB
48Elfogadva3ms3368 KiB
49Elfogadva3ms3572 KiB
50Elfogadva3ms3660 KiB
51Elfogadva3ms3660 KiB
52Elfogadva3ms3988 KiB
53Elfogadva4ms4436 KiB
54Elfogadva4ms4692 KiB
55Elfogadva4ms4472 KiB
56Elfogadva4ms4616 KiB
57Elfogadva4ms4568 KiB
58Elfogadva4ms4648 KiB
59Elfogadva123ms28324 KiB
60Elfogadva129ms30376 KiB
61Elfogadva134ms30320 KiB
62Elfogadva119ms28252 KiB
63Elfogadva122ms28292 KiB
64Elfogadva125ms30476 KiB
65Elfogadva128ms30556 KiB
66Elfogadva115ms28488 KiB
67Elfogadva103ms28656 KiB
68Elfogadva109ms30744 KiB
69Elfogadva114ms30752 KiB
70Elfogadva97ms28704 KiB
71Elfogadva83ms28704 KiB
72Elfogadva98ms30904 KiB
73Elfogadva100ms30900 KiB
74Elfogadva86ms28696 KiB
75Elfogadva192ms34068 KiB
76Elfogadva144ms22648 KiB
77Elfogadva57ms17056 KiB
78Elfogadva137ms22600 KiB
79Elfogadva101ms17576 KiB
80Elfogadva131ms26284 KiB
81Elfogadva133ms26132 KiB
82Elfogadva142ms26188 KiB
83Elfogadva194ms34320 KiB
84Elfogadva63ms17120 KiB
85Elfogadva111ms17588 KiB
86Elfogadva144ms26668 KiB
87Elfogadva144ms26664 KiB
88Elfogadva143ms26792 KiB
89Elfogadva140ms26792 KiB