답안 #58616

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
58616 2018-07-18T13:00:48 Z RezwanArefin01 곤돌라 (IOI14_gondola) C++17
100 / 100
87 ms 6192 KB
#include <bits/stdc++.h> 
#include "gondola.h"
using namespace std; 

int valid(int n, int a[]) {
    int X, idx = -1;
    for(int i = 0; i < n; i++) {
        if(a[i] >= 1 && a[i] <= n) {
            X = a[i], idx = i; 
        }
    }
    set<int> st(a, a + n); 
    if(st.size() != n) return 0; 
    if(idx == -1) return 1; 
    for(int i = 0; i < n; i++) {
        if(a[i] >= 1 && a[i] <= n) {
            if((X + i - idx + n) % n != a[i] % n) 
                return 0;
        }
    } return 1; 
}

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

int replacement(int n, int a[], int res[]) {
    int l = 0, idx = -1, X; 
    for(int i = 0; i < n; i++) {
        if(1 <= a[i] && a[i] <= n) 
            idx = i, X = a[i]; 
    }
    int b[n];
    if(idx == -1) {
        for(int i = 0; i < n; i++) b[i] = i + 1; 
    } else { 
        for(int i = 0; i < n; i++) { 
            b[i] = (X + i - idx + n) % n; 
            if(b[i] == 0) b[i] = n;
        }
    } 
    vector<pair<int, int> > v; 
    for(int i = 0; i < n; i++) {
        if(a[i] > n) {
            v.emplace_back(a[i], b[i]); 
        }
    }
    sort(v.begin(), v.end()); 
    for(int i = 0; i < v.size(); i++) {
        while(l + n <  v[i].first) { 
            res[l++] = v[i].second; 
            v[i].second = l + n; 
        }
    } return l; 
}

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

const int mod = 1e9 + 9; 
typedef long long ll;

inline int Pow(int a, int p) {
	int ret = 1; while(p) {
		if(p & 1) ret = (ll) ret * a % mod;
		a = (ll) a * a % mod;
		p >>= 1;
	} return ret;
}
int countReplacement(int n, int a[]) {
    if(!valid(n, a)) return 0; 
    long long ans = 1; 
    vector<int> v;
    for(int i = 0; i < n; i++) 
        if(a[i] > n) v.push_back(a[i]); 
    sort(v.begin(), v.end()); 
    for(int i = 0; i < v.size(); i++) {
        int rem = v.size() - i; 
        int tot = v[i] - (i ? v[i - 1] + 1 : n + 1); 
        ans *= Pow(rem, tot); 
        ans %= mod; 
    } 
    if(v.size() == n) 
        ans = ans * n % mod; 
    return ans; 
}

Compilation message

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:13:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(st.size() != n) return 0; 
        ~~~~~~~~~~^~~~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:47:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < v.size(); i++) {
                    ~~^~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:74:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < v.size(); i++) {
                    ~~^~~~~~~~~~
gondola.cpp:80:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(v.size() == n) 
        ~~~~~~~~~^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 2 ms 508 KB Output is correct
3 Correct 2 ms 508 KB Output is correct
4 Correct 3 ms 512 KB Output is correct
5 Correct 2 ms 536 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 536 KB Output is correct
2 Correct 2 ms 588 KB Output is correct
3 Correct 3 ms 588 KB Output is correct
4 Correct 3 ms 588 KB Output is correct
5 Correct 3 ms 588 KB Output is correct
6 Correct 12 ms 2376 KB Output is correct
7 Correct 56 ms 3912 KB Output is correct
8 Correct 28 ms 4296 KB Output is correct
9 Correct 9 ms 4296 KB Output is correct
10 Correct 30 ms 4808 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4808 KB Output is correct
2 Correct 3 ms 4808 KB Output is correct
3 Correct 2 ms 4808 KB Output is correct
4 Correct 3 ms 4808 KB Output is correct
5 Correct 3 ms 4808 KB Output is correct
6 Correct 16 ms 4808 KB Output is correct
7 Correct 42 ms 4808 KB Output is correct
8 Correct 26 ms 4808 KB Output is correct
9 Correct 9 ms 4808 KB Output is correct
10 Correct 32 ms 4860 KB Output is correct
11 Correct 3 ms 4860 KB Output is correct
12 Correct 3 ms 4860 KB Output is correct
13 Correct 31 ms 4860 KB Output is correct
14 Correct 2 ms 4860 KB Output is correct
15 Correct 78 ms 4988 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4988 KB Output is correct
2 Correct 2 ms 4988 KB Output is correct
3 Correct 3 ms 4988 KB Output is correct
4 Correct 3 ms 4988 KB Output is correct
5 Correct 2 ms 4988 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4988 KB Output is correct
2 Correct 2 ms 4988 KB Output is correct
3 Correct 3 ms 4988 KB Output is correct
4 Correct 2 ms 4988 KB Output is correct
5 Correct 3 ms 4988 KB Output is correct
6 Correct 2 ms 4988 KB Output is correct
7 Correct 3 ms 4988 KB Output is correct
8 Correct 3 ms 4988 KB Output is correct
9 Correct 3 ms 4988 KB Output is correct
10 Correct 3 ms 4988 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4988 KB Output is correct
2 Correct 3 ms 4988 KB Output is correct
3 Correct 3 ms 4988 KB Output is correct
4 Correct 2 ms 4988 KB Output is correct
5 Correct 3 ms 4988 KB Output is correct
6 Correct 2 ms 4988 KB Output is correct
7 Correct 2 ms 4988 KB Output is correct
8 Correct 3 ms 4988 KB Output is correct
9 Correct 2 ms 4988 KB Output is correct
10 Correct 3 ms 4988 KB Output is correct
11 Correct 12 ms 4988 KB Output is correct
12 Correct 15 ms 4988 KB Output is correct
13 Correct 20 ms 4988 KB Output is correct
14 Correct 20 ms 4988 KB Output is correct
15 Correct 30 ms 4988 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4988 KB Output is correct
2 Correct 2 ms 4988 KB Output is correct
3 Correct 2 ms 4988 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4988 KB Output is correct
2 Correct 3 ms 4988 KB Output is correct
3 Correct 2 ms 4988 KB Output is correct
4 Correct 3 ms 4988 KB Output is correct
5 Correct 3 ms 4988 KB Output is correct
6 Correct 2 ms 4988 KB Output is correct
7 Correct 2 ms 4988 KB Output is correct
8 Correct 2 ms 4988 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4988 KB Output is correct
2 Correct 2 ms 4988 KB Output is correct
3 Correct 3 ms 4988 KB Output is correct
4 Correct 3 ms 4988 KB Output is correct
5 Correct 2 ms 4988 KB Output is correct
6 Correct 2 ms 4988 KB Output is correct
7 Correct 3 ms 4988 KB Output is correct
8 Correct 2 ms 4988 KB Output is correct
9 Correct 62 ms 4988 KB Output is correct
10 Correct 45 ms 4988 KB Output is correct
11 Correct 16 ms 4988 KB Output is correct
12 Correct 19 ms 4988 KB Output is correct
13 Correct 7 ms 4988 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4988 KB Output is correct
2 Correct 3 ms 4988 KB Output is correct
3 Correct 3 ms 4988 KB Output is correct
4 Correct 2 ms 4988 KB Output is correct
5 Correct 3 ms 4988 KB Output is correct
6 Correct 2 ms 4988 KB Output is correct
7 Correct 2 ms 4988 KB Output is correct
8 Correct 2 ms 4988 KB Output is correct
9 Correct 84 ms 5168 KB Output is correct
10 Correct 52 ms 5168 KB Output is correct
11 Correct 16 ms 5168 KB Output is correct
12 Correct 22 ms 5168 KB Output is correct
13 Correct 6 ms 5168 KB Output is correct
14 Correct 75 ms 5680 KB Output is correct
15 Correct 87 ms 6192 KB Output is correct
16 Correct 15 ms 6192 KB Output is correct
17 Correct 72 ms 6192 KB Output is correct
18 Correct 30 ms 6192 KB Output is correct