답안 #52437

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
52437 2018-06-26T02:39:54 Z shoemakerjo 곤돌라 (IOI14_gondola) C++14
30 / 100
72 ms 10068 KB
#include <bits/stdc++.h>
#include "gondola.h"
using namespace std;
#define ll long long
#define pii pair<int, int>
const int mod = 1000000009;

int modpow(int base, int p) {
	if (p == 0) return 1;
	if (p & 1) {
		int tmp = modpow(base, p-1);
		return (tmp*1LL*base)%mod;
	}
	int tmp = modpow(base, p/2);
	return (tmp*1LL*tmp)%mod;
}

int valid(int n, int inputSeq[])
{
	int minval = n+1;
	int minind = 0;
	set<int> seen;
	for (int i = 0; i < n; i++) {
		if (inputSeq[i] < minval) {
			minval = inputSeq[i];
			minind = i;
		}
		if (seen.count(inputSeq[i])> 0) return 0;
		seen.insert(inputSeq[i]);
	}
	if (minval > n) return 0;

	int cur = minind;
	//cannot appear after something that is greater than me and still less than n
	int maxv = -1;
	for (int i = 0; i < n; i++) {
		if (inputSeq[cur] < maxv) return 0;
		if (inputSeq[cur] <= n) {
			maxv = max(maxv, inputSeq[cur]);
		}
		cur = (cur+1)%n;
	}
	return 1; //nothing was bad enough to return
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{	
	//find a valid replacement sequence

	int sz = 0; //get what becomes what

	int lowbelow = -1;
	int lowind = -1;
	int maxval = -1;
	map<int, int> ch;
	int maxind = -1;
	int cvals[n];
	for (int i = 0; i < n; i++) {
		cvals[i] = gondolaSeq[i];
		if (gondolaSeq[i] <= n) {
			if (gondolaSeq[i] < lowbelow || lowbelow == -1) {
				lowbelow = gondolaSeq[i];
				lowind = i;
			}

		}
		else {
			ch[gondolaSeq[i]] = i;
		}
		if (gondolaSeq[i] > maxval) {
			maxval = gondolaSeq[i];
			maxind = i;
		}
	}
	//do not use a vector for ans just add stuff to replacementSeq as you go and increment sz
	int initialvals[n];
	if (lowind == -1) {
		//just do stuff idk - for now we will just do nothing
	}
	int cv = gondolaSeq[lowind];
	int ci = lowind;
	for (int i = 0; i < n; i++) {
		initialvals[ci] = cv;
		ci = (ci+1)%n;
		cv = (cv+1)%n;
		if (cv == 0) cv += n;
	}
	for (int i = n+1; i <= maxval; i++) {
		if (ch[i]) {
			replacementSeq[sz++] = ch[i];
		}
		else {
			replacementSeq[sz++] = cvals[maxind];
			cvals[maxind] = i;
		}
	}

	return sz;
}

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

int countReplacement(int n, int inputSeq[])
{
	if (valid(n, inputSeq) == 0) { //just add this in there
		return 0;
	}
	int ans = 1;
	vector<int> aftn;
	aftn.push_back(n);
	for (int i = 0; i < n; i++) {
		if (inputSeq[i] > n) {
			aftn.push_back(inputSeq[i]);
		}
	}
	sort(aftn.begin(), aftn.end());
	for (int i = 1; i < aftn.size(); i++) {
		int rep = aftn[i]-aftn[i-1]-1;
		int ops = aftn.size() - i;
		//cout << "here: " << aftn[i] << " rep, ops: " << rep << " " << ops << endl;
		ans = (ans * 1LL * modpow(ops, rep))%mod;
	}

	return ans;
}

Compilation message

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:78:6: warning: variable 'initialvals' set but not used [-Wunused-but-set-variable]
  int initialvals[n];
      ^~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:119:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < aftn.size(); i++) {
                  ~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 492 KB Output is correct
3 Correct 2 ms 492 KB Output is correct
4 Correct 2 ms 492 KB Output is correct
5 Correct 3 ms 492 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 492 KB Output is correct
2 Correct 2 ms 528 KB Output is correct
3 Correct 2 ms 548 KB Output is correct
4 Correct 3 ms 552 KB Output is correct
5 Correct 2 ms 560 KB Output is correct
6 Correct 21 ms 2740 KB Output is correct
7 Correct 16 ms 2740 KB Output is correct
8 Correct 37 ms 5480 KB Output is correct
9 Correct 12 ms 5480 KB Output is correct
10 Correct 49 ms 6644 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 6644 KB Output is correct
2 Correct 2 ms 6644 KB Output is correct
3 Correct 2 ms 6644 KB Output is correct
4 Correct 2 ms 6644 KB Output is correct
5 Correct 3 ms 6644 KB Output is correct
6 Correct 22 ms 6644 KB Output is correct
7 Correct 17 ms 6644 KB Output is correct
8 Correct 38 ms 7184 KB Output is correct
9 Correct 13 ms 7184 KB Output is correct
10 Correct 56 ms 8560 KB Output is correct
11 Correct 2 ms 8560 KB Output is correct
12 Incorrect 3 ms 8560 KB Output isn't correct
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 8560 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 8560 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 8560 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 8560 KB Output is correct
2 Correct 2 ms 8560 KB Output is correct
3 Correct 3 ms 8560 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 8560 KB Output is correct
2 Correct 2 ms 8560 KB Output is correct
3 Correct 2 ms 8560 KB Output is correct
4 Correct 2 ms 8560 KB Output is correct
5 Correct 2 ms 8560 KB Output is correct
6 Correct 2 ms 8560 KB Output is correct
7 Correct 3 ms 8560 KB Output is correct
8 Correct 2 ms 8560 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 8560 KB Output is correct
2 Correct 2 ms 8560 KB Output is correct
3 Correct 2 ms 8560 KB Output is correct
4 Correct 2 ms 8560 KB Output is correct
5 Correct 2 ms 8560 KB Output is correct
6 Correct 2 ms 8560 KB Output is correct
7 Correct 2 ms 8560 KB Output is correct
8 Correct 3 ms 8560 KB Output is correct
9 Correct 64 ms 8720 KB Output is correct
10 Correct 65 ms 8720 KB Output is correct
11 Correct 25 ms 8720 KB Output is correct
12 Correct 32 ms 8720 KB Output is correct
13 Incorrect 6 ms 8720 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 8720 KB Output is correct
2 Correct 2 ms 8720 KB Output is correct
3 Correct 3 ms 8720 KB Output is correct
4 Correct 3 ms 8720 KB Output is correct
5 Correct 2 ms 8720 KB Output is correct
6 Correct 2 ms 8720 KB Output is correct
7 Correct 3 ms 8720 KB Output is correct
8 Correct 2 ms 8720 KB Output is correct
9 Correct 72 ms 10068 KB Output is correct
10 Correct 50 ms 10068 KB Output is correct
11 Correct 19 ms 10068 KB Output is correct
12 Correct 23 ms 10068 KB Output is correct
13 Incorrect 7 ms 10068 KB Output isn't correct
14 Halted 0 ms 0 KB -