Submission #785089

#TimeUsernameProblemLanguageResultExecution timeMemory
785089mindiyakGondola (IOI14_gondola)C++14
55 / 100
25 ms2828 KiB
#include "gondola.h" #include <iostream> #include <unordered_set> #include <set> using namespace std; #define ll long long ll M = 1e9+9; int alpha = 1; int valid(int n, int inputSeq[]) { unordered_set <int> broken; alpha = 1; for(int i=0;i<n;i++){ if(inputSeq[i] < n){ alpha = inputSeq[i]-i; break; } } // cout << alpha << endl; for(int i=0;i<n;i++){ if(inputSeq[i] > n){ if(broken.count(inputSeq[i]) != 0){ // cout << "broken duplicate" << endl; return 0; } broken.insert(inputSeq[i]); }else{ if(i<=(n-alpha)){ if(inputSeq[i] != (i+alpha)){ // cout << i << " " << inputSeq[i] << " " << (i+alpha) << endl; return 0; } }else{ if(inputSeq[i] != (i-(n-alpha))){ // cout << i << " " << inputSeq[i] << " " << (i-(n-alpha)) << endl; return 0; } } } } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { set<pair<int,int>> arr; int len = 0; alpha = 1; for(int i=0;i<n;i++){ if(gondolaSeq[i] <= n){ alpha = gondolaSeq[i]-i; break; } } // cout << alpha << endl; for(int i=0;i<n;i++){ if(gondolaSeq[i] > n){ if(i<=(n-alpha)){ arr.insert({gondolaSeq[i],(i+alpha)}); }else{ arr.insert({gondolaSeq[i],(i-(n-alpha))}); } } } while(arr.size() > 0){ pair<int,int> a = *arr.begin(); arr.erase(arr.begin()); int c = a.first,d = a.second; // cout << a.first << " " << a.second << endl; replacementSeq[len] = d; len++; d = n+len; if(c!=d){ arr.insert({c,d}); } } return len; } //---------------------- int countReplacement(int n, int inputSeq[]) { if(valid(n,inputSeq) == 0) return 0; set<pair<int,int>> arr; ll len = 1; for(int i=0;i<n;i++){ if(inputSeq[i] > n){ if(i<=(n-alpha)){ arr.insert({inputSeq[i],(i+alpha)}); }else{ arr.insert({inputSeq[i],(i-(n-alpha))}); } } } if(arr.size() == 0) return 1; while(arr.size() > 0){ pair<int,int> a = *arr.begin(); arr.erase(arr.begin()); int c = a.first,d = a.second; len++; d = n+len; if(c!=d){ len = ((len%M) * (max((c-d),1)%M))%M; } } return len; }
#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...