Submission #516109

#TimeUsernameProblemLanguageResultExecution timeMemory
516109sliviuGondola (IOI14_gondola)C++14
55 / 100
37 ms5108 KiB
#include <bits/stdc++.h> #include <gondola.h> using namespace std; int valid(int n, int a[]) { map<int, int> mp; int index = -1; for (int i = 0; i < n; ++i) { if (mp.count(a[i])) return 0; ++mp[a[i]]; } for (int i = 0; i < n; ++i) if (a[i] <= n) { index = i; break; } if (index == -1) return 1; int cur = a[index]; cur = cur == n ? 1 : cur + 1; for (int j = (index + 1) % n; j != index; j = (j + 1) % n, cur = cur == n ? 1 : cur + 1) if (a[j] <= n && a[j] != cur) return 0; return 1; } int replacement(int n, int a[], int ans[]) { vector<int> real(n); int index = -1, sol = 0, cur; for (int i = 0; i < n; ++i) if (a[i] <= n) { real[i] = a[i]; index = i; break; } if (index == -1) { real[0] = 1; index = 0; } cur = real[index]; cur = cur == n ? 1 : cur + 1; for (int j = (index + 1) % n; j != index; j = (j + 1) % n, cur = cur == n ? 1 : cur + 1) real[j] = cur; vector<pair<int, int>> b; for (int i = 0; i < n; ++i) if (a[i] > n) b.emplace_back(a[i], i); sort(b.begin(), b.end()); int last = n; for (auto [val, idx] : b) { ans[sol++] = real[idx]; for (int i = last + 1; i < val; ++i) ans[sol++] = i; last = val; } return sol; } int countReplacement(int n, int a[]) { if (!valid(n, a)) return 0; const int mod = 1e9 + 9; vector<int> real(n); int index = -1, cur, sol = 1; for (int i = 0; i < n; ++i) if (a[i] <= n) { real[i] = a[i]; index = i; break; } if (index == -1) { real[0] = 1; sol = n; index = 0; } cur = real[index]; cur = cur == n ? 1 : cur + 1; for (int j = (index + 1) % n; j != index; j = (j + 1) % n, cur = cur == n ? 1 : cur + 1) real[j] = cur; vector<pair<int, int>> b; for (int i = 0; i < n; ++i) if (a[i] > n) b.emplace_back(a[i], i); sort(b.begin(), b.end()); int last = n, cnt = b.size(); if (cnt) sol = cnt; auto pow = [&](int b, int e) { if (e < 1) return 1; int ans = 1; while (e) { if (e & 1) ans = 1LL * ans * b % mod; b = 1LL * b * b % mod, e >>= 1; } return ans; }; for (auto [val, idx] : b) { sol = (1LL * sol * pow(cnt--, val - 1 - last)) % mod; last = val; } return sol; }

Compilation message (stderr)

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:54:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   54 |  for (auto [val, idx] : b) {
      |            ^
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:103:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  103 |  for (auto [val, idx] : b) {
      |            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...