Submission #718212

#TimeUsernameProblemLanguageResultExecution timeMemory
718212thimote75Gondola (IOI14_gondola)C++14
90 / 100
1076 ms5352 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; int valid(int n, int inputSeq[]) { set<int> omega; for (int i = 0; i < n; i ++) omega.insert(inputSeq[i]); if (omega.size() != n) return 0; int jStart = -1; for (int i = 0; i < n; i ++) { if (inputSeq[i] > n) continue ; jStart = i; break; } if (jStart == -1) return 1; int start = jStart - inputSeq[jStart] + 1; if (start < 0) start += n; for (int mu = 0; mu < n; mu ++) { int nu = (start + mu); if (nu >= n) nu -= n; if (inputSeq[nu] > n) continue ; if (inputSeq[nu] != mu + 1) return 0; } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int maxValue = 0; int maxPos = -1; int jStart = -1; for (int i = 0; i < n; i ++) { if (gondolaSeq[i] > maxValue) { maxValue = gondolaSeq[i]; maxPos = i; } if (gondolaSeq[i] <= n) { jStart = i; } } int start = 0; if (jStart != -1) { start = jStart - gondolaSeq[jStart] + 1; if (start < 0) start += n; } int length = maxValue - n; for (int i = 0; i < length; i ++) { replacementSeq[i] = -1; } for (int i = 0; i < n; i ++) { if (gondolaSeq[i] > n && gondolaSeq[i] != maxValue) { replacementSeq[gondolaSeq[i] - n - 1] = (n + i - start) % n + 1; } } int last = (n + maxPos - start) % n + 1; for (int i = 0; i < length; i ++) { int value = i + n + 1; if (replacementSeq[i] != -1) continue ; replacementSeq[i] = last; last = value; } return length; } //---------------------- #define num long long const num MOD = 1e9 + 9; int countReplacement(int n, int inputSeq[]) { if (!valid(n, inputSeq)) return 0; bool includes_old = false; for (int i = 0; i < n; i ++) if (inputSeq[i] <= n) includes_old = true; int maxValue = 0; set<int> omega; for (int i = 0; i < n; i ++) { if (inputSeq[i] > n) omega.insert(inputSeq[i]); maxValue = max(maxValue, inputSeq[i]); } num result = 1; for (int l = n + 1; l <= maxValue; l ++) { if (omega.find(l) != omega.end()) { omega.erase(l); continue ; } result *= omega.size(); result %= MOD; } if (!includes_old) { result *= n; result %= MOD; } return (int) result; }

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:10:20: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   10 |   if (omega.size() != n) return 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...