Submission #1034770

#TimeUsernameProblemLanguageResultExecution timeMemory
1034770ArthuroWichGondola (IOI14_gondola)C++17
100 / 100
39 ms5980 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; int valid(int n, int gondolaSeq[]) { int mi = INT_MAX, ind = -1; set<int> c; for (int i = 0; i < n; i++) { c.insert(gondolaSeq[i]); if (mi > gondolaSeq[i]) { mi = gondolaSeq[i]; ind = i; } } if (c.size() < n) { return 0; } if (mi > n) { return 1; } ind -= (mi-1); ind += n; ind %= n; vector<int> a; for (int i = ind; i < n; i++) { a.push_back(gondolaSeq[i]); } for (int i = 0; i < ind; i++) { a.push_back(gondolaSeq[i]); } for (int i = 0; i < n; i++) { if (a[i] <= n && a[i] != i+1) { return 0; } } return 1; } int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int mi = INT_MAX, ind = -1, ma = 0; set<int> c; for (int i = 0; i < n; i++) { ma = max(ma, gondolaSeq[i]); c.insert(gondolaSeq[i]); if (mi > gondolaSeq[i]) { mi = gondolaSeq[i]; ind = i; } } vector<pair<int, int>> num; if (ma <= n) { return 0; } if (mi > n) { for (int i = 0; i < n; i++) { num.push_back({gondolaSeq[i], i+1}); } int l = 0; sort(num.begin(), num.end()); l = num.back().first-n; for (int i = 0; i < l; i++) { replacementSeq[i] = num.back().second; } for (int i = 0; i < num.size(); i++) { replacementSeq[num[i].first-n-1] = num[i].second; } vector<int> ans(n+1, 0); for (int i = 1; i <= n; i++) { ans[i] = i; } for (int i = 0; i < l; i++) { int v = replacementSeq[i]; replacementSeq[i] = ans[replacementSeq[i]]; ans[v] = n+i+1; } return l; } else { ind -= (mi-1); ind += n; ind %= n; vector<int> a; for (int i = ind; i < n; i++) { a.push_back(gondolaSeq[i]); } for (int i = 0; i < ind; i++) { a.push_back(gondolaSeq[i]); } for (int i = 0; i < n; i++) { if (a[i] > n) { num.push_back({a[i], i+1}); } } int l = 0; sort(num.begin(), num.end()); l = num.back().first-n; for (int i = 0; i < l; i++) { replacementSeq[i] = num.back().second; } for (int i = 0; i < num.size(); i++) { replacementSeq[num[i].first-n-1] = num[i].second; } vector<int> ans(n+1, 0); for (int i = 1; i <= n; i++) { ans[i] = i; } for (int i = 0; i < l; i++) { int v = replacementSeq[i]; replacementSeq[i] = ans[replacementSeq[i]]; ans[v] = n+i+1; } return l; } } long long int binexp(long long int a, long long int b, long long int m) { long long int r = 1; while(b > 0) { if (b & 1) { b--; r *= a; r %= m; } b /= 2; a *= a; a %= m; } return r; } int countReplacement(int n, int gondolaSeq[]) { if (!valid(n, gondolaSeq)) { return 0; } vector<int> num; long long int ans = 1, mod = 1000000009; bool f = 0; for (int i = 0; i < n; i++) { if (gondolaSeq[i] > n) { num.push_back(gondolaSeq[i]); } } if (num.size() == n) { ans = num.size(); } if (num.size() == 0) { return ans; } int v = num.size(); num.push_back(n); sort(num.begin(), num.end()); for (int i = 1; i < num.size(); i++) { ans *= binexp(v, num[i]-num[i-1]-1, mod); ans %= mod; v--; } return ans; }

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:14:18: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   14 |     if (c.size() < n) {
      |         ~~~~~~~~~^~~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:62:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |         for (int i = 0; i < num.size(); i++) {
      |                         ~~^~~~~~~~~~~~
gondola.cpp:97:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   97 |         for (int i = 0; i < num.size(); i++) {
      |                         ~~^~~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:138:20: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  138 |     if (num.size() == n) {
      |         ~~~~~~~~~~~^~~~
gondola.cpp:147:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  147 |     for (int i = 1; i < num.size(); i++) {
      |                     ~~^~~~~~~~~~~~
gondola.cpp:132:10: warning: unused variable 'f' [-Wunused-variable]
  132 |     bool f = 0;
      |          ^
#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...