답안 #107803

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
107803 2019-04-25T20:04:46 Z FiloSanza 곤돌라 (IOI14_gondola) C++14
75 / 100
43 ms 4600 KB
#include <bits/stdc++.h>
#include "gondola.h"

using namespace std;

int valid(int N, int inputSeq[])
{
    int ind = -1, x = -1;
	for(int i = 0; i < N; i++) {
		if(inputSeq[i] <= N) {
			ind = i;
			x = inputSeq[i];
			break;
		}
	}
	for(int i = ind + 1; i < N; i++) {
		if(inputSeq[i] <= N && (x + i - ind - 1) % N + 1 != inputSeq[i])
			return 0;
	}

    set<int> s;
    for(int i=0; i<N; i++) s.insert(inputSeq[i]);
    if(s.size() != N) return 0;
    return 1;
}

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

int replacement(int N, int gondolaSeq[], int replacementSeq[])
{
    int cont = 0;
    vector<int> seq;
    vector<pair<int, int>> s;
    vector<int> v;

    for(int i=0; i<N; i++) 
        if(gondolaSeq[i] <= N)
            v.push_back(gondolaSeq[i]);

    sort(v.begin(), v.end());

    if(!v.empty()){
        deque<int> q;
        for(int i=0; i<N; i++) q.push_back(gondolaSeq[i]);

        while(q.front() != v.front()){
            q.push_front(q.back());
            q.pop_back();
        }

        for(int i=1; i<v.front(); i++){
            q.push_front(q.back());
            q.pop_back();
        }
        
        while(!q.empty()){
            seq.push_back(q.front());
            q.pop_front();
        }
    }
    else{
        for(int i=0; i<N; i++) seq.push_back(gondolaSeq[i]);
    }
    
    for(int i=0; i<N; i++){
        if(seq[i] >= N)
            s.push_back({seq[i], i+1});
    }

    sort(s.begin(), s.end());

    if(s.empty()) return 0;

    int nxt = N+1;
    for(auto i : s){
        int to = i.second;
        while(nxt <= i.first){
            replacementSeq[cont++] = to;
            to = nxt;
            nxt++;
        }
    }

    return cont;
}

//----------------------
const int MOD = 1e9+9;

/*
int power(int b, int e){
    int res = 1;
    for(int i=0; i<e; i++) res = (1LL * res*b)%MOD;
    return res % MOD;
}
*/

long long power(long long b, long long e){
    if(e == 0) return 1LL;
    if(e == 1) return b%MOD;
    long long res = power(b, e/2);
    if(e%2==0) return (1LL*res*res)%MOD;
    return (1LL*res*res*b)%MOD;    
}

int countReplacement(int N, int gondolaSeq[])
{
    if(valid(N, gondolaSeq) == 0) return 0;

    int maxi = *max_element(gondolaSeq, gondolaSeq+N);
    vector<long long> v;
    v.reserve(N);
    for(int i=0; i<N; i++) if(gondolaSeq[i] > N) v.push_back(gondolaSeq[i]);
    sort(v.begin(), v.end());
    
    long long curr = N;
    long long ans = 1;
    for(long long i=0; i<v.size(); i++){
        ans = (1LL * ans * power(1LL*v.size() - i, v[i] - curr - 1)) % MOD;
        curr = v[i];
    }

    if(*min_element(gondolaSeq, gondolaSeq+N) > N) ans = (1LL * ans * N) % MOD;

    return ans;
}

Compilation message

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:23:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(s.size() != N) return 0;
        ~~~~~~~~~^~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:118:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(long long i=0; i<v.size(); i++){
                        ~^~~~~~~~~
gondola.cpp:110:9: warning: unused variable 'maxi' [-Wunused-variable]
     int maxi = *max_element(gondolaSeq, gondolaSeq+N);
         ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 13 ms 2176 KB Output is correct
7 Correct 13 ms 640 KB Output is correct
8 Correct 24 ms 3968 KB Output is correct
9 Correct 8 ms 1536 KB Output is correct
10 Correct 32 ms 4600 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 14 ms 2176 KB Output is correct
7 Correct 13 ms 640 KB Output is correct
8 Correct 27 ms 3968 KB Output is correct
9 Correct 8 ms 1536 KB Output is correct
10 Correct 30 ms 4600 KB Output is correct
11 Correct 2 ms 256 KB Output is correct
12 Correct 2 ms 384 KB Output is correct
13 Correct 7 ms 512 KB Output is correct
14 Correct 2 ms 384 KB Output is correct
15 Correct 19 ms 640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 1 ms 256 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Correct 2 ms 384 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
9 Correct 2 ms 384 KB Output is correct
10 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Correct 2 ms 384 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
9 Correct 2 ms 384 KB Output is correct
10 Correct 3 ms 384 KB Output is correct
11 Correct 14 ms 2040 KB Output is correct
12 Correct 18 ms 2200 KB Output is correct
13 Correct 17 ms 1528 KB Output is correct
14 Correct 14 ms 2032 KB Output is correct
15 Correct 28 ms 2348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
3 Correct 3 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Correct 2 ms 384 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 3 ms 256 KB Output is correct
7 Correct 2 ms 256 KB Output is correct
8 Correct 2 ms 256 KB Output is correct
9 Incorrect 42 ms 4088 KB Integer -667809712 violates the range [0, 1000000008]
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Correct 2 ms 256 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
9 Incorrect 43 ms 4088 KB Integer -667809712 violates the range [0, 1000000008]
10 Halted 0 ms 0 KB -