Submission #428262

#TimeUsernameProblemLanguageResultExecution timeMemory
428262DaktoGondola (IOI14_gondola)C++17
100 / 100
95 ms6084 KiB
#include "gondola.h"
#include <bits/stdc++.h>

using namespace std;

int valid(int n, int inputSeq[])
{
    int begind=-1;
    map<int,int> m;
    for(int i=0; i<n; i++){
        if(m[inputSeq[i]]) return 0;
        m[inputSeq[i]]++;
        if(inputSeq[i]<=n){
            if(begind==-1){
                begind=(n+i-inputSeq[i]+1)%n;
            }
            else if((n+i-begind)%n+1!=inputSeq[i]) return 0;
        }
    }
    return 1;
}

//----------------------

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
    int begind=0;
    map<int,int> m;
    for(int i=0; i<n; i++){
        if(gondolaSeq[i]>n){
            m[gondolaSeq[i]]=i;
        }
        else begind=(n+i-gondolaSeq[i]+1)%n;
    }
    int c=n+1;
    for(auto i:m){
        int curr=(n+i.second-begind)%n+1;
        while(curr!=i.first){
            replacementSeq[c-n-1]=curr;
            curr=c;
            c++;
        }
    }
    return c-n-1;
}

//----------------------


const int mod=1e9+9;

int ipow(long long b,long long p){
    long long res=1;
    while(p){
        if(p&1) res=(res*b)%mod;
        b=(b*b)%mod;
        p>>=1;
    }
    return res;
}

int countReplacement(int n, int inputSeq[])
{
    if(!valid(n,inputSeq)) return 0;
    vector<int> v={n};
    bool setpos=0;
    for(int i=0; i<n; i++){
        if(inputSeq[i]>n){
            v.push_back(inputSeq[i]);
        }
        else setpos=1;
    }
    sort(v.begin(),v.end());
    long long res=setpos?1:n;
    for(int i=1; i<v.size(); i++){
        res=(res*ipow(v.size()-i,v[i]-v[i-1]-1))%mod;
    }
    return res;
}

Compilation message (stderr)

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:75:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   75 |     for(int i=1; i<v.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...