제출 #126803

#제출 시각아이디문제언어결과실행 시간메모리
126803ekrem곤돌라 (IOI14_gondola)C++98
100 / 100
61 ms2716 KiB
#include "gondola.h"
#include <bits/stdc++.h>
#define st first
#define nd second
#define mp make_pair
#define pb push_back
#define sol (k+k)
#define sag (k+k+1)
#define orta ((bas+son)/2)
#define coc g[node][i]
#define mod 1000000009
#define inf 1000000009
#define N 1000005
using namespace std;

typedef long long ll;
typedef pair < int , int > ii;

int n, m, mx, a[N], u[N], b[N];


int valid(int n, int a[]){
	int x = inf;
	for(int i = 0; i < n; i++){
		a[i]--;
		if(u[a[i]])return 0;
		u[a[i]] = 1;
		if(a[i] < n and a[i] >= 0){
			if(x != inf and x != (a[i] - i + n)%n )
				return 0;
			x = (a[i] - i + n)%n;
		}
	}
	return 1;
}

int replacement(int n, int a[], int b[]){
	int m = -1, x = 0;
	priority_queue < ii > q;
	priority_queue < int > yok;
	for(int i = 0; i < n; i++){
		a[i]--;
		u[a[i]] = 1;
		mx = max(mx, a[i]);
		if(a[i] < n and a[i] >= 0)
			x = (a[i] - i + n)%n;
		else
			q.push(mp(a[i], i));
	}
	for(int i = n; i <= mx; i++)
		if(!u[i])
			yok.push(i);
	while(!q.empty()){
		int y = q.top().st;
		int ind = q.top().nd;
		q.pop();
		if(yok.empty())
			b[++m] = (x + ind)%n + 1;
		else{
			b[++m] = yok.top() + 1;
			q.push(mp(yok.top(), ind));
			yok.pop();
		}
	}
	reverse(b, b + m + 1);
	// for(int i = 0; i <= m; i++)
	// 	cout << "b"<<b[i] << " ";
 	return m + 1;
}

ll fe(ll a, ll us){
	if(us <= 1)
		return (us)?a:1ll;
	ll t = fe(a, us/2);
	return (us&1)?(t*t%mod)*a%mod : t*t%mod;
}

int countReplacement(int n, int a[]){
	ll x = n, say = 0, ans = 1;
	for(int i = 0; i < n; i++){
		mx = max(mx, a[i]);
		if(a[i] <= n)
			x = 1;
		else
			b[++m] = a[i];
	}
	sort(b + 1, b + m + 1);
	b[0] = n;
	for(int i = 1; i <= m; i++){
		ans = ans*fe(m - i + 1, b[i] - b[i - 1] - 1)%mod;
	}
 	return ans*x%mod;
}




// int gondolaSequence[100001];
// int replacementSequence[250001];
// int main()
// {
// freopen("in.txt", "r", stdin);
// freopen("outt.txt", "w", stdout);
// int i, n, tag;
// int nr; 
// assert(scanf("%d", &tag)==1);
// assert(scanf("%d", &n)==1);
// for(i=0;i< n;i++)
// assert( scanf("%d", &gondolaSequence[i]) ==1);

// switch (tag){
// case 1: case 2: case 3:
// printf("%d\n", valid(n, gondolaSequence));
// break;

// case 4: case 5: case 6:
// nr = replacement(n, gondolaSequence, replacementSequence);
// printf("%d ", nr);
// if (nr > 0)
// {
// for (i=0; i<nr-1; i++)
// printf("%d ", replacementSequence[i]);
// printf("%d\n", replacementSequence[nr-1]);
// }  
// else printf("\n");
// break;

// case 7: case 8: case 9: case 10:
// printf("%d\n",  countReplacement(n, gondolaSequence));  
// break;
// }

// return 0;
// }

컴파일 시 표준 에러 (stderr) 메시지

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:54:7: warning: unused variable 'y' [-Wunused-variable]
   int y = q.top().st;
       ^
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:79:12: warning: unused variable 'say' [-Wunused-variable]
  ll x = n, say = 0, ans = 1;
            ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...