Submission #212654

#TimeUsernameProblemLanguageResultExecution timeMemory
212654mohamedsobhi777Gondola (IOI14_gondola)C++14
25 / 100
18 ms1920 KiB
#include <bits/stdc++.h>
#include "gondola.h"
using namespace std ; 

const int N = 3e5 + 7 ; 

int valid(int n, int inputSeq[]){

    vector<int> vis(N , 0) ; 
    int cur = inputSeq[0] -1  ; 
    for(int i = 0 ; i < n; i++){
        if(vis[inputSeq[i]]++)return 0 ; 
        if(--inputSeq[i]!=cur)
            return 0 ; 
        cur = (cur+1) %n ; 
    }
    return 1 ; 
}

int ab[N] ; 

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
    int proto[N] ; 
    for(int i = 0 ; i <n; i++)proto[i] = i+1 ; 

    for(int i =  0 ; i <n; i++){
        if(gondolaSeq[i] <=n){
            int k = gondolaSeq[i] +1; 
            proto[i] = gondolaSeq[i] ; 
            if(k==n+1)k=1 ;
            for(int j = 1 ; j < n ;j++){
                int loc = (i+j)%n; 
                proto[loc] = k++ ; 
                if(k==n+1)k = 1 ; 
            }          
            break;
        }
    }
    int bad = 0 ; 
    priority_queue<pair<int , int > > q ;
    int mx = 0 ;
    for(int i = 0 ; i< n;i ++){
        q.push({gondolaSeq[i] , i}) ;
        ab[gondolaSeq[i]] = -1 ;  
        mx = max(mx , gondolaSeq[i]) ; 
        bad+=(gondolaSeq[i]>n) ; 
    }
    int cabs = mx ;
    int cur = 0 ; 
    while(q.size()){
        int tp = q.top().first; 
        int ix = q.top().second ; 
        int hope = proto[ix] ; 
        if(tp==n)break;
        ab[tp] = -1 ; 
        while(ab[cabs]==-1){
            cabs--; 
        }
        if(bad>1){
            replacementSeq[cur++] = hope ; 
            bad-- ; 
            q.pop(); 
            q.push({hope , ix}) ; 
        }   
        else {
            replacementSeq[cur++] = cabs ; 
            q.pop() ;
            q.push({cabs , ix}) ;  
            cabs-- ; 
        }
    }
    reverse(replacementSeq , replacementSeq + cur) ; 
    return cur ; 
}

int countReplacement(int n, int inputSeq[])
{
  return -3;
}
#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...