Submission #1198069

#TimeUsernameProblemLanguageResultExecution timeMemory
1198069njoopGondola (IOI14_gondola)C++20
60 / 100
16 ms2776 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; int valid(int n, int inputSeq[]) { int st=0, mn=1e9; vector<int> v; for(int i=0; i<n; i++) { v.push_back(inputSeq[i]); if(inputSeq[i] <= n && inputSeq[i] < mn) { mn = inputSeq[i]; st = i; } } sort(v.begin(), v.end()); for(int i=1; i<n; i++) { if(v[i] == v[i-1]) return 0; } if(mn == 1e9) return 1; for(int i=st; i<n; i++) { if(inputSeq[i] <= n && inputSeq[i] != mn) return 0; mn++; } for(int i=0; i<st; i++) { if(inputSeq[i] <= n && inputSeq[i] != mn) return 0; mn++; } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int oriSeq[n], pos=1, val=1, idx=0; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; priority_queue<int> avai; map<int, int> mp; for(int i=0; i<n; i++) { if(gondolaSeq[i] <= n) { pos = i; val = gondolaSeq[i]; } else { pq.push({gondolaSeq[i], i}); avai.push(i); } } for(int i=pos; i<n; i++) { oriSeq[i] = val; val++; if(val > n) val -= n; } for(int i=0; i<pos; i++) { oriSeq[i] = val; val++; if(val > n) val -= n; } for(int i=n+1; pq.size(); i++) { if(i == pq.top().first) { replacementSeq[idx] = oriSeq[pq.top().second]; oriSeq[pq.top().second] = i; pq.pop(); idx++; mp[pq.top().second] = 1; } else { while(avai.size() && mp[avai.top()]) avai.pop(); if(avai.empty()) return idx; replacementSeq[idx] = oriSeq[avai.top()]; oriSeq[avai.top()] = i; idx++; } } return idx; } //---------------------- int countReplacement(int n, int inputSeq[]) { int avai=0; vector<int> ra; if(valid(n, inputSeq) == 0) return 0; long long ans = 1, mod = 1e9+9; ra.push_back(n); for(int i=0; i<n; i++) { if(inputSeq[i] > n) { ra.push_back(inputSeq[i]); avai++; } } if(ra.size() == n+1) { ans *= n; ans %= mod; } sort(ra.begin(), ra.end()); for(int i=1; i<ra.size(); i++) { int rem = ra[i]-ra[i-1]; if(rem != 0 && ra.size()-i-1 != 0) ans *= rem*(ra.size()-i-1); ans %= 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...