답안 #533918

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
533918 2022-03-07T15:38:30 Z M_W 곤돌라 (IOI14_gondola) C++11
100 / 100
37 ms 5880 KB
#include "gondola.h"
#include <bits/stdc++.h>
#define ii pair<int, int>
using namespace std;
unordered_map<int, bool> mark;

int valid(int n, int inputSeq[])
{
	int idx = 0;
	for(int i = 0; i < n; i++){
		if(mark[inputSeq[i]]) return 0;
		mark[inputSeq[i]] = true;
		
		if(idx == 0 && inputSeq[i] <= n){
			idx = inputSeq[i];
		}
		if(idx != 0 && inputSeq[i] <= n && inputSeq[i] != idx) return 0;
		if(idx != 0) idx++;
		if(idx > n) idx = 1;
	}
	return 1;
}

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

int a[100001];

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
	int idx = 0;
	priority_queue<ii, vector<ii>, greater<ii> > pq;
	for(int i = 0; i < n; i++){
		if(gondolaSeq[i] > n){
			pq.push({gondolaSeq[i], i});
		}
		if(idx == 0 && gondolaSeq[i] <= n){
			idx = gondolaSeq[i];
			
			for(int j = i - 1, tmp = idx - 1; j >= 0; j--, tmp--){
				if(tmp <= 0) tmp += n;
				a[j] = tmp;
			}
		}
		if(idx != 0){
			a[i] = idx;
			idx++;
		} 
		if(idx > n) idx = 1;
	}
	if(idx == 0){
		for(int i = 0; i < n; i++) a[i] = i + 1;
	}
	
	int replace_idx = n + 1, ans_idx = 0;
	while(!pq.empty()){
		int k = pq.top().first;
		int id = pq.top().second;
		pq.pop();
		
		while(replace_idx <= k){
			replacementSeq[ans_idx++] = a[id];
			a[id] = replace_idx;
			replace_idx++;
		}
	}
	return ans_idx;
}

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

const long long md = 1e9 + 9;
long long pw(long long a, long long b){
	if(b == 0) return 1ll;
	if(b == 1) return a;
	
	long long e = pw(a, b >> 1);
	if(b % 2) return ((e * e) % md) * a % md;
	return (e * e) % md;
}

int countReplacement(int n, int inputSeq[])
{
	if(valid(n, inputSeq) == 0) return 0;
	long long ans = 1, chk = 0;
	priority_queue<int, vector<int>, greater<int> > pq;
	for(int i = 0; i < n; i++){
		if(inputSeq[i] > n) pq.push(inputSeq[i]);
		else chk = 1;
	}
	
	if(!chk) ans = n * 1ll;
	if(pq.empty()) return 1;
	pq.push(n);
	
	while(pq.size() > 1){
		int u = pq.top(); pq.pop();
		int v = pq.top();
		
		ans = (ans * pw(pq.size() * 1ll, (v - u - 1) * 1ll)) % md;
	}
	return int(ans);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 6 ms 1960 KB Output is correct
7 Correct 7 ms 588 KB Output is correct
8 Correct 10 ms 3416 KB Output is correct
9 Correct 4 ms 1484 KB Output is correct
10 Correct 12 ms 3888 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 6 ms 1960 KB Output is correct
7 Correct 8 ms 576 KB Output is correct
8 Correct 11 ms 3448 KB Output is correct
9 Correct 5 ms 1484 KB Output is correct
10 Correct 12 ms 3868 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 0 ms 204 KB Output is correct
13 Correct 4 ms 460 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 7 ms 588 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
11 Correct 7 ms 844 KB Output is correct
12 Correct 10 ms 972 KB Output is correct
13 Correct 13 ms 1340 KB Output is correct
14 Correct 6 ms 844 KB Output is correct
15 Correct 18 ms 2312 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 23 ms 3960 KB Output is correct
10 Correct 18 ms 3548 KB Output is correct
11 Correct 8 ms 1576 KB Output is correct
12 Correct 9 ms 1832 KB Output is correct
13 Correct 3 ms 588 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 0 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 24 ms 4032 KB Output is correct
10 Correct 18 ms 3504 KB Output is correct
11 Correct 7 ms 1532 KB Output is correct
12 Correct 9 ms 1832 KB Output is correct
13 Correct 2 ms 588 KB Output is correct
14 Correct 31 ms 4704 KB Output is correct
15 Correct 37 ms 5880 KB Output is correct
16 Correct 6 ms 1228 KB Output is correct
17 Correct 22 ms 3648 KB Output is correct
18 Correct 12 ms 2216 KB Output is correct