답안 #66373

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
66373 2018-08-10T10:41:43 Z someone_aa 곤돌라 (IOI14_gondola) C++17
60 / 100
67 ms 10428 KB
#include "gondola.h"
#include <bits/stdc++.h>

#define ll long long
using namespace std;
const int maxn = 250100;
const ll mod = 1000000009;
map<int, bool>exist;
int fin_val[maxn];
ll cnt[maxn];

int valid(int n, int arr[]) {
    bool check = true;

    for(int i=1;i<n;i++) {
        if(arr[i] > n) continue;
        else if(arr[i] == 1) {
            if(arr[i-1] < n)
                check = false;
        }
        else {
            if(arr[i-1] <= n && arr[i-1] != arr[i] - 1) check = false;
        }
    }

    sort(arr, arr+n);
    for(int i=1;i<n;i++) {
        if(arr[i] == arr[i-1]) check = false;
    }
    if(check) return 1;
    else return 0;
}

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

int replacement(int n, int arr[], int replacementSeq[]) {
    int maxm = 0;
    int found_i = 0, st_val = 1;
    for(int i=0;i<n;i++) {
        exist[arr[i]] = true;
        if(arr[i] <= n) {
            found_i = i;
            st_val = arr[i];
        }
        maxm = max(maxm, arr[i]);
    }
    exist[n] = true;
    int l = maxm - n;


    for(int i=found_i;i<n;i++) {
        fin_val[i] = st_val;
        st_val++;
        if(st_val == n + 1) st_val = 1;
    }

    for(int i=0;i<found_i;i++) {
        fin_val[i] = st_val;
        st_val++;
        if(st_val == n + 1) st_val = 1;
    }

    for(int i=0;i<n;i++) {
        while(!exist[arr[i]-1] && arr[i] > n) {
            replacementSeq[arr[i]-n-1] = arr[i] - 1;
            arr[i]--;
        }
        if(arr[i] > n) replacementSeq[arr[i]-n-1] = fin_val[i];
    }

    return l;
}

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

ll power(ll a, ll b) {
    if(b == 0) return 1LL;
    else if(b == 1) return 1LL * a % mod;
    else {
        if(b%2 == 0) {
            ll half = power(a, b/2) % mod;
            return (1LL*half * half)% mod;
        }
        else if(b%2==1) {
            return (power(a, b-1)) % mod;
        }
    }
}

int countReplacement(int n, int arr[]) {
    if(!valid(n, arr)) return 0;
    vector<ll>nums;
    for(int i=0;i<n;i++) {
        if(arr[i] > n) nums.push_back(arr[i]);
    }
    nums.push_back(n);
    sort(nums.begin(), nums.end());

    ll result = 1LL;
    for(int i=1;i<nums.size();i++) {
        ll diff = nums[i] - nums[i-1] - 1;
        ll p = nums.size() - i;
        result *= power(p, diff);
        result %= mod;
    }

    if(nums.size() > n) {
        result *= n;
        result %= mod;
    }
    return result;
}

/*int main() {
    int arr[] = {1, 2, 7, 6};
    int arr2[1];
    cout<<countReplacement(4, arr);
}*/

Compilation message

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:100:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=1;i<nums.size();i++) {
                 ~^~~~~~~~~~~~
gondola.cpp:107:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(nums.size() > n) {
        ~~~~~~~~~~~~^~~
gondola.cpp: In function 'long long int power(long long int, long long int)':
gondola.cpp:88:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 3 ms 468 KB Output is correct
3 Correct 2 ms 496 KB Output is correct
4 Correct 2 ms 540 KB Output is correct
5 Correct 2 ms 544 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 544 KB Output is correct
2 Correct 2 ms 544 KB Output is correct
3 Correct 2 ms 544 KB Output is correct
4 Correct 2 ms 716 KB Output is correct
5 Correct 2 ms 716 KB Output is correct
6 Correct 10 ms 736 KB Output is correct
7 Correct 21 ms 868 KB Output is correct
8 Correct 14 ms 872 KB Output is correct
9 Correct 7 ms 872 KB Output is correct
10 Correct 20 ms 888 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 888 KB Output is correct
2 Correct 3 ms 888 KB Output is correct
3 Correct 2 ms 888 KB Output is correct
4 Correct 2 ms 888 KB Output is correct
5 Correct 2 ms 888 KB Output is correct
6 Correct 11 ms 888 KB Output is correct
7 Correct 23 ms 892 KB Output is correct
8 Correct 14 ms 892 KB Output is correct
9 Correct 8 ms 892 KB Output is correct
10 Correct 20 ms 892 KB Output is correct
11 Correct 2 ms 892 KB Output is correct
12 Correct 2 ms 892 KB Output is correct
13 Correct 10 ms 892 KB Output is correct
14 Correct 2 ms 892 KB Output is correct
15 Correct 21 ms 896 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 896 KB Output is correct
2 Correct 2 ms 896 KB Output is correct
3 Correct 2 ms 896 KB Output is correct
4 Correct 2 ms 896 KB Output is correct
5 Correct 2 ms 896 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 896 KB Output is correct
2 Correct 2 ms 896 KB Output is correct
3 Correct 2 ms 896 KB Output is correct
4 Correct 2 ms 896 KB Output is correct
5 Correct 2 ms 896 KB Output is correct
6 Correct 2 ms 896 KB Output is correct
7 Correct 2 ms 896 KB Output is correct
8 Correct 3 ms 896 KB Output is correct
9 Correct 3 ms 896 KB Output is correct
10 Correct 4 ms 932 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 932 KB Output is correct
2 Correct 2 ms 932 KB Output is correct
3 Correct 2 ms 932 KB Output is correct
4 Correct 2 ms 932 KB Output is correct
5 Correct 2 ms 932 KB Output is correct
6 Correct 2 ms 932 KB Output is correct
7 Correct 3 ms 932 KB Output is correct
8 Correct 3 ms 932 KB Output is correct
9 Correct 3 ms 932 KB Output is correct
10 Correct 3 ms 956 KB Output is correct
11 Correct 41 ms 4952 KB Output is correct
12 Correct 65 ms 5564 KB Output is correct
13 Correct 58 ms 5564 KB Output is correct
14 Correct 45 ms 5564 KB Output is correct
15 Correct 67 ms 10428 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 10428 KB Output is correct
2 Correct 2 ms 10428 KB Output is correct
3 Correct 2 ms 10428 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 10428 KB Output is correct
2 Correct 2 ms 10428 KB Output is correct
3 Correct 2 ms 10428 KB Output is correct
4 Correct 3 ms 10428 KB Output is correct
5 Incorrect 2 ms 10428 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 10428 KB Output is correct
2 Correct 2 ms 10428 KB Output is correct
3 Correct 2 ms 10428 KB Output is correct
4 Correct 2 ms 10428 KB Output is correct
5 Incorrect 2 ms 10428 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 10428 KB Output is correct
2 Correct 2 ms 10428 KB Output is correct
3 Correct 2 ms 10428 KB Output is correct
4 Correct 2 ms 10428 KB Output is correct
5 Incorrect 2 ms 10428 KB Output isn't correct
6 Halted 0 ms 0 KB -