Submission #773565

#TimeUsernameProblemLanguageResultExecution timeMemory
773565loctildoreGondola (IOI14_gondola)C++14
75 / 100
15 ms2200 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; // trans rights #define ll long long #define f first #define s second #define endl '\n' #define all(x) begin(x), end(x) #define MOD 1000000009 int valid(int n, int inputSeq[]) { int tmp = -1; set<int> st; for (int i = 0; i < n; i++) { if (inputSeq[i] <= n) { int cur = (inputSeq[i] - i + n) % n; if (tmp == -1) tmp = cur; if (tmp != cur) return 0; } else { if (st.find(inputSeq[i]) != st.end()) return 0; st.insert(inputSeq[i]); } } return 1; } //---------------------- int ori[100069]; int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int offst = 1; pair<int,int> maxi = {0, -1}; for (int i = 0; i < n; i++) { if (gondolaSeq[i] <= n) { offst = gondolaSeq[i] - i; } maxi = max(maxi, {gondolaSeq[i], i}); } for (int i = 0; i < n; i++) { ori[i] = (i + offst + n) % n; if (ori[i] == 0) ori[i] = n; } int l = maxi.f - n; for (int i = 0; i < l; i++) { replacementSeq[i] = -1; } for (int i = 0; i < n; i++) { if (gondolaSeq[i] > n && gondolaSeq[i] != maxi.f) { replacementSeq[gondolaSeq[i] - n - 1] = ori[i]; } } int cur = ori[maxi.s]; for (int i = 0; i < l; i++) { if (~replacementSeq[i]) continue; replacementSeq[i] = cur; cur = i + n + 1; } return l; } //---------------------- ll pw(int x, int y) { if (y == 0) return 1; if (y % 2) return x * pw(x, y - 1); ll tmp = pw(x, y / 2); return (tmp * tmp) % MOD; } int countReplacement(int n, int inputSeq[]) { vector<int> vctr= {n}; ll rtn = n; for (int i = 0; i < n; i++) { if (inputSeq[i] > n) vctr.push_back(inputSeq[i]); else rtn = 1; } sort(all(vctr)); int tmp = vctr.size(); for (int i = 1; i < vctr.size(); i++) { rtn = (rtn * pw(tmp - i, vctr[i] - vctr[i - 1] - 1)) % MOD; } return rtn; }

Compilation message (stderr)

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:84:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   84 |     for (int i = 1; i < vctr.size(); i++) {
      |                     ~~^~~~~~~~~~~~~
#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...