답안 #915714

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
915714 2024-01-24T15:25:27 Z ByeWorld 곤돌라 (IOI14_gondola) C++14
90 / 100
17 ms 6180 KB
#include "gondola.h"
#include <bits/stdc++.h>
#define bupol __builtin_popcount
#define ll long long
#define ld long double
#define fi first
#define se second
#define pb push_back
#define lf (id<<1)
#define rg ((id<<1)|1)
#define md ((l+r)>>1)
using namespace std;
const int MAXN = 3e5+10;
const int MAXK = 205;
const int LOG = 20;
const int MOD = 1e9+9;
const int SQRT = 520;
const int INF = 1e9+10;
typedef pair<ll,ll> pii;
typedef pair<int, pii> ipii;

ll sum(ll a, ll b){
	return (a+b)%MOD;
}
ll mul(ll a, ll b){
	a %= MOD; b %= MOD;
	return (a*b)%MOD;
}
int n;
int a[MAXN], sta[MAXN], idx = -1;
vector <int> vec, ans; vector <pii> sw;
bool use[MAXN];
int mn = INF, mx = -1;
ll ANS;

int valid(int N, int inputSeq[])
{
	n = N;
	for(int i=1; i<=n; i++) a[i] = inputSeq[i-1];

	for(int i=1; i<=n; i++){
		if(mn > a[i]){
			mn = a[i]; idx = i;
		}
	}
	assert(idx != -1); 
	vec.pb(-1);
	for(int i=idx; i<=n; i++) vec.pb(a[i]);
	for(int i=1; i<=idx-1; i++) vec.pb(a[i]);

	for(int i=1; i<=n; i++){
		if(use[vec[i]]) return 0; // ngedobel
		use[vec[i]] = 1;

		if(vec[i] >= n+1) continue; // gpp gk dicek
 		
 		// vec[i] <= n
 		int num = vec[1]+i-1; // harusnya angkanya brp
 		if(num >= n+1) num -= n;

		if(mx >= vec[i] || vec[i] != num) return 0; // loh kok turun
		mx = max(mx, vec[i]);
	}
 	return 1;
}

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

int replacement(int N, int gondolaSeq[], int replacementSeq[])
{
	n = N;
	for(int i=1; i<=n; i++) a[i] = gondolaSeq[i-1];
 	for(int i=1; i<=n; i++){
		if(mn > a[i]){
			mn = a[i]; idx = i;
		}
	}
	assert(idx != -1); 
	vec.pb(-1);
	for(int i=idx; i<=n; i++) vec.pb(a[i]);
	for(int i=1; i<=idx-1; i++) vec.pb(a[i]);

	if(mn <= n){
		for(int i=1; i<=n; i++){
			if(use[vec[i]]) return 0; // ngedobel
			use[vec[i]] = 1;

	 		int num = vec[1]+i-1; // harusnya angkanya brp
	 		if(num >= n+1) num -= n;
	 		sta[i] = num; // startnya brp

			if(vec[i] <= n) continue; // gpp gk dicek
			if(vec[i] >= n+1){
				sw.pb({vec[i], i});
			}
		}
	} else {
		for(int i=1; i<=n; i++){
			sta[i] = i;
			sw.pb({vec[i], i});
		}
	}
	sort(sw.begin(), sw.end());
	//for(auto in : sw) cout << vec[in.fi] << ' ' << in.se << " p\n";

	int cnt = n+1;
	for(auto in : sw){
		int idx = in.se, val = in.fi; // num -> val

		ans.pb(sta[idx]); sta[idx] = cnt++;
		for(int i=sta[idx]; true; i++){
			if(sta[idx]==val) break;
			ans.pb(sta[idx]);
			sta[idx] = cnt++;
		}
	}

	for(int i=0; i<ans.size(); i++) replacementSeq[i] = ans[i];
 	return (int)(ans.size());
}

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

int countReplacement(int N, int inputSeq[])
{
	if(!valid(N, inputSeq)) return 0;
	//cout << " masuk\n";
	n = N;
	for(int i=1; i<=n; i++) a[i] = inputSeq[i-1];

 	for(int i=1; i<=n; i++){
		if(mn > a[i]){
			mn = a[i]; idx = i;
		}
	}
	assert(idx != -1); 
	vec.pb(-1);
	for(int i=idx; i<=n; i++) vec.pb(a[i]);
	for(int i=1; i<=idx-1; i++) vec.pb(a[i]);

	ANS = 1ll;
	if(mn <= n){
		for(int i=1; i<=n; i++){
	 		int num = vec[1]+i-1; // harusnya angkanya brp
	 		if(num >= n+1) num -= n;
	 		sta[i] = num; // startnya brp

			if(vec[i] <= n) continue; // gpp gk dicek
			if(vec[i] >= n+1){
				sw.pb({vec[i], i});
			}
		}
	} else {
		for(int i=1; i<=n; i++){
			sta[i] = i;
			sw.pb({vec[i], i}); 
		}
		ANS = n;
	}
	sort(sw.begin(), sw.end());
	//for(auto in : sw) cout << in.fi << ' ' << in.se << " p\n";

	ll cnt = n+1, num = (ll)(sw.size());
	for(auto in : sw){
		ll idx = in.se, val = in.fi; // num -> val

		sta[idx] = cnt++;
		for(int i=sta[idx]; true; i++){
			if(sta[idx]==val) break;
			sta[idx] = cnt++;
			ANS = mul(ANS, num);
		}
		num--;
	}

	return (int)(ANS);
}

Compilation message

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:118:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  118 |  for(int i=0; i<ans.size(); i++) replacementSeq[i] = ans[i];
      |               ~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 1 ms 2652 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2392 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 4 ms 3048 KB Output is correct
7 Correct 7 ms 3496 KB Output is correct
8 Correct 6 ms 3288 KB Output is correct
9 Correct 2 ms 2840 KB Output is correct
10 Correct 8 ms 3288 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 4 ms 2908 KB Output is correct
7 Correct 7 ms 3284 KB Output is correct
8 Correct 6 ms 3288 KB Output is correct
9 Correct 2 ms 2648 KB Output is correct
10 Correct 7 ms 3288 KB Output is correct
11 Correct 1 ms 2396 KB Output is correct
12 Correct 1 ms 2396 KB Output is correct
13 Correct 4 ms 3180 KB Output is correct
14 Correct 1 ms 2396 KB Output is correct
15 Correct 7 ms 3288 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2392 KB Output is correct
9 Correct 1 ms 2396 KB Output is correct
10 Correct 1 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 1 ms 2392 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 1 ms 2396 KB Output is correct
10 Correct 1 ms 2396 KB Output is correct
11 Correct 10 ms 3288 KB Output is correct
12 Correct 8 ms 3288 KB Output is correct
13 Correct 12 ms 4316 KB Output is correct
14 Correct 7 ms 3288 KB Output is correct
15 Correct 17 ms 5460 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2392 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 15 ms 5244 KB Output is correct
10 Correct 10 ms 4440 KB Output is correct
11 Correct 6 ms 3460 KB Output is correct
12 Correct 6 ms 3416 KB Output is correct
13 Correct 3 ms 2652 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 13 ms 4952 KB Output is correct
10 Correct 14 ms 4436 KB Output is correct
11 Correct 6 ms 3420 KB Output is correct
12 Correct 6 ms 3396 KB Output is correct
13 Correct 3 ms 2648 KB Output is correct
14 Runtime error 12 ms 6180 KB Execution killed with signal 11
15 Halted 0 ms 0 KB -