제출 #433422

#제출 시각아이디문제언어결과실행 시간메모리
433422muhammad_hokimiyon곤돌라 (IOI14_gondola)C++14
60 / 100
23 ms2744 KiB
#include "gondola.h"
#include <bits/stdc++.h>

using namespace std;

int valid(int n, int inputSeq[])
{
        int st = 0;
        for(int i = 0; i < n; i++){
                if(inputSeq[i] == 1)st = i;
        }
        vector<int> cnt(250500, 0);
        for(int i = 0; i < n; i++){
                cnt[inputSeq[i]]++;
        }
        for(int i = 0; i <= 250500; i++){
                if(cnt[i] > 1){
                        return 0;
                }
        }
        for(int it = 0; it < n - 2; it++){
                int p = (it + st) % n;
                int nx = (it + 1 + st) % n;
                if(inputSeq[p] > n || inputSeq[nx] > n){
                        continue;
                }
                if(inputSeq[nx] - inputSeq[p] != 1){
                        return 0;
                }
        }
        return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
        vector<int> a(n + 1, 0);
        int cnt = 0;
        int mx = 0;
        int id1 = 0;
        for(int i = 0; i < n; i++){
                int x = gondolaSeq[i];
                if(x > mx){
                        id1 = i;
                }
                mx = max(mx, x);
                if(x <= n){
                        a[((i - x + 1) % n + n) % n]++;
                        cnt++;
                }
        }
        vector<int> id(250500, -1);
        for(int i = 0; i < n; i++){
                id[gondolaSeq[i]] = i;
        }
        bool f = true;
        int newn = n + 1;
        int l = 0;
        for(int i = 0; i < n; i++){
                if(a[i] == cnt){
                        f = false;
                        vector<int> newid(n, 0);
                        for(int j = 0; j < n; j++){
                                newid[(i + j) % n] = j + 1;
                        }
                        while(newn <= mx){
                                if(id[newn] == -1){
                                        replacementSeq[l++] = newid[id1];
                                        newid[id1] = newn;
                                }else{
                                        replacementSeq[l++] = newid[id[newn]];
                                }
                                newn++;
                        }
                        break;
                }
        }
        assert(f == false);
        return l;
}

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

int countReplacement(int n, int inputSeq[])
{
        int st = 0;
        for(int i = 0; i < n; i++){
                if(inputSeq[i] == 1)st = i;
        }
        map<int, int> cnt;
        for(int i = 0; i < n; i++){
                cnt[inputSeq[i]]++;
        }
        for(auto x : cnt){
                if(x.second > 1){
                        return 0;
                }
        }
        for(int it = 0; it < n - 2; it++){
                int p = (it + st) % n;
                int nx = (it + 1 + st) % n;
                if(inputSeq[p] > n || inputSeq[nx] > n){
                        continue;
                }
                if(inputSeq[nx] - inputSeq[p] != 1){
                        return 0;
                }
        }
        return 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...