Submission #253319

#TimeUsernameProblemLanguageResultExecution timeMemory
253319eohomegrownappsGondola (IOI14_gondola)C++14
100 / 100
44 ms5384 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; ll m = 1000000009; int valid(int n, int inputSeq[]){ unordered_map<int,bool> seen; int mnv = 250002; int mnind = -1; for (int i = 0; i<n; i++){ if (seen[inputSeq[i]]){ return 0; } seen[inputSeq[i]]=true; if (mnv>inputSeq[i]){ mnv=inputSeq[i]; mnind=i; } } if (mnv>n){ return 1; } mnv++; for (int i = (mnind+1)%n; i!=mnind; i=(i+1)%n){ if (1<=inputSeq[i]&&inputSeq[i]<=n){ if (mnv!=inputSeq[i]){ return 0; } } mnv++; } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]){ vector<pair<int,int>> gondind; int oneind = 0; for (int i = 0; i<n; i++){ if (gondolaSeq[i]<n){ oneind=(i+n-(gondolaSeq[i]-1))%n; break; } } for (int i = 0; i<n; i++){ if (gondolaSeq[i]>=n){ gondind.push_back({gondolaSeq[i],i}); } } vector<int> gondolas(n); int gptr = oneind; int incr = 0; do { gondolas[gptr]=incr; gptr++;incr++; gptr%=n; } while (gptr!=oneind); sort(gondind.begin(),gondind.end()); int ptr = 0; int gprev = n; int nextgondola = n; for (auto g : gondind){ for (int h = gprev; h<g.first; h++){ //replace gondola at index g.second replacementSeq[ptr]=gondolas[g.second]+1; ptr++; gondolas[g.second]=nextgondola; nextgondola++; } gprev=g.first; } return ptr; } //---------------------- ll mexp(ll a, ll b){ if (b==0){ return 1; } if (b%2==1){ ll ans = mexp(a,(b-1)/2); return (((ans*ans)%m)*a)%m; } else { ll ans = mexp(a,b/2); return (ans*ans)%m; } } int countReplacement(int n, int inputSeq[]){ if (!valid(n,inputSeq)){ return 0; } vector<ll> highervals; for (int i = 0; i<n; i++){ if (inputSeq[i]>n){ highervals.push_back(inputSeq[i]); } } if (highervals.size()==0){ return 1; } ll ans = 1; if (highervals.size()==n){ ans=n; } sort(highervals.begin(),highervals.end()); ll prevval = n; for (ll i = 0; i<highervals.size(); i++){ ll diff = highervals[i]-prevval-1; ans*=mexp(highervals.size()-i,diff); ans%=m; prevval=highervals[i]; } return ans; }

Compilation message (stderr)

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:108:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (highervals.size()==n){
         ~~~~~~~~~~~~~~~~~^~~
gondola.cpp:113:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (ll i = 0; i<highervals.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...