제출 #212657

#제출 시각아이디문제언어결과실행 시간메모리
212657mohamedsobhi777Gondola (IOI14_gondola)C++14
60 / 100
35 ms2288 KiB
#include <bits/stdc++.h>
#include "gondola.h"
using namespace std ; 

long long mod = 1e9 + 7 ; 
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 cur = 0 , ladder = n +1;
    vector< pair<int, int > > q ; 
    for(int i = 0 ; i < n ;i++){
        q.push_back({gondolaSeq[i] , proto[i]});
    }
    sort(q.begin(), q.end()) ; 
    for(int i= 0 ; i < n; i++){
        int fr = q[i].first , se = q[i] .second ; 
        while(se < fr){   
            replacementSeq[cur++] = se ; 
            se = ladder ++ ;
        }
    }
    return cur ; 
}

long long fas(long long a , long long b){
    if(!b)return 1ll ; 
    long long ret = fas(a , b/2) ; 
    ret = (ret*ret)%mod ; 
    if(b%2)
        ret = (ret*a)%mod ; 
    return ret ;
}

long long mul(long long a , long long b){
    return (1ll * a * b) % mod ; 
}

int countReplacement(int n, int inputSeq[])
{
    map<int , bool > mp ; 
    for(int i = 0 ; i < n;i++){
        if(mp[inputSeq[i]])return 0 ; 
        mp[inputSeq[i]] = 1 ; 
    }
    long long ret = 1ll ; 

    int proto[N] ; 
    for(int i = 0 ; i <n; i++)proto[i] = i+1 ; 

    for(int i =  0 ; i <n; i++){
        if(inputSeq[i] <=n){
            int k = inputSeq[i] +1; 
            proto[i] = inputSeq[i] ; 
            if(k==n+1)k=1 ;
            for(int j = 1 ; j < n ;j++){
                int loc = (i+j)%n; 
                proto[loc] = k++ ; 
                if(inputSeq[loc] <=n && proto[loc]!=inputSeq[loc]) 
                    return 0 ; 
                if(k==n+1)k = 1 ; 
            }          
            break;
        }
    }

    int cur = 0 , ladder = n +1;

    vector< pair<int, int > > q ; 
    for(int i = 0 ; i < n ;i++){
        q.push_back({inputSeq[i] , proto[i]});
    }
    sort(q.begin(), q.end()) ; 

    long long base = n ; 
    for(int i= 0 ; i < n; i++){
        int fr = q[i].first , se = q[i] .second ;
        if(fr==se){
            base-- ; 
            continue ; 
        }
        ret = mul(ret , fas(base , fr - ladder)); 
        ladder = fr+1 ; 
        base-- ; 
    }
    return ret ; 
}

컴파일 시 표준 에러 (stderr) 메시지

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:98:9: warning: unused variable 'cur' [-Wunused-variable]
     int cur = 0 , ladder = n +1;
         ^~~
#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...