Submission #106275

#TimeUsernameProblemLanguageResultExecution timeMemory
106275popovicirobertGondola (IOI14_gondola)C++14
75 / 100
137 ms10488 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; const int MOD = (int) 1e9 + 9; const int INF = (int) 1e9; int valid(int n, int inputSeq[]) { int id = 0, pos; map <int, bool> mp; for(int i = 0; i < n; i++) { if(mp[inputSeq[i]] == 1) { return 0; } mp[inputSeq[i]] = 1; if(inputSeq[i] <= n) { id = inputSeq[i]; pos = i; } } if(id != 0) { int cur = id; int i = pos; do { if(inputSeq[i] <= n && inputSeq[i] != cur) { return 0; } cur++; if(cur == n + 1) { cur = 1; } i = (i + 1) % n; }while(i != pos); } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { vector <int> positions; for(int i = 0; i < n; i++) { if(gondolaSeq[i] > n) { positions.push_back(i); } } sort(positions.begin(), positions.end(), [&](const int &a, const int &b) { return gondolaSeq[a] < gondolaSeq[b]; }); map <int, int> mp; int id = 0, pos, mx = 0; for(int i = 0; i < n; i++) { mp[gondolaSeq[i]] = i + 1; mx = max(mx, gondolaSeq[i]); if(gondolaSeq[i] <= n) { id = gondolaSeq[i]; pos = i; } } vector <int> ord(n); iota(ord.begin(), ord.end(), 1); if(id != 0) { int i = pos; do { ord[i] = id; id++; if(id == n + 1) { id = 1; } i = (i + 1) % n; }while(i != pos); } pos = 0; int sz = 0; for(int i = n + 1; i <= mx; i++) { replacementSeq[sz++] = ord[positions[pos]]; ord[positions[pos]] = i; if(mp[i] > 0) { pos++; } } return sz; } //---------------------- int countReplacement(int n, int inputSeq[]) { if(!valid(n, inputSeq)) { return 0; } map <int, int> mp; int cnt = 0, mx = 0; for(int i = 0; i < n; i++) { mp[inputSeq[i]] = i + 1; mx = max(mx, inputSeq[i]); if(inputSeq[i] > n) { cnt++; } } int ans = 1; for(int i = n + 1; i <= mx; i++) { if(mp[i] > 0) { cnt--; } else { ans = (1LL * ans * cnt) % MOD; } } return ans; }
#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...