Submission #702568

# Submission time Handle Problem Language Result Execution time Memory
702568 2023-02-24T12:46:57 Z jamezzz Gondola (IOI14_gondola) C++17
100 / 100
70 ms 10440 KB
#include "gondola.h"
#include <bits/stdc++.h>
using namespace std;

#define mod 1000000009

int valid(int n,int inputSeq[]){
	int offset=-1;
	set<int> s;
	for(int i=0;i<n;++i){
		if(s.find(inputSeq[i])!=s.end())return 0;
		s.insert(inputSeq[i]);
		if(inputSeq[i]<=n){
			if(offset==-1)offset=(inputSeq[i]-i-1+n)%n;
			else if(offset!=(inputSeq[i]-i-1+n)%n)return 0;
		}
	}
	return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[]){
	set<int> changed;
	map<int,int> pos;
	int offset=0,dummy=0,cur=0;
	int mx=0;
	for(int i=0;i<n;++i){
		if(gondolaSeq[i]<=n)offset=(gondolaSeq[i]-1-i+n)%n;
		else{
			changed.insert(gondolaSeq[i]);
			if(gondolaSeq[i]>gondolaSeq[dummy])dummy=i;
		}
		mx=max(mx,gondolaSeq[i]);
	}
	for(int i=0;i<n;++i){
		if(gondolaSeq[i]>n){
			pos[gondolaSeq[i]]=((i+offset)%n)+1;
		}
	}
	cur=(dummy+offset)%n+1;
	int ori=cur;
	for(int i=n+1;i<=mx;++i){
		if(changed.find(i)==changed.end()||pos[i]==ori){
			replacementSeq[i-n-1]=cur;
			cur=i;
		}
		else{
			replacementSeq[i-n-1]=pos[i];
		}
	}
	return mx-n;
}

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

int fp(int x,int a){
	if(a==0)return 1;
	int t=fp(x,a/2);
	long long r=((long long)t*t)%mod;
	if(a%2)r=(r*x)%mod;
	return (int)r;
}

int countReplacement(int n, int inputSeq[]){
	set<int> changed;
	int mx=0;
	for(int i=0;i<n;++i){
		if(inputSeq[i]>n){
			changed.insert(inputSeq[i]);
			mx=max(mx,inputSeq[i]);
		}
	}
	long long ans=valid(n,inputSeq);
	if(changed.size()==n)ans*=n;
	if(changed.size()==0)return (int)ans;
	int num=1;
	int pv=*(--changed.end());
	changed.erase(--changed.end());
	while(!changed.empty()){
		int x=*(--changed.end());
		changed.erase(--changed.end());
		ans=(ans*fp(num,pv-x-1))%mod;
		pv=x;
		++num;
	}
	ans=(ans*fp(num,pv-n-1))%mod;
	return (int)ans;
}

Compilation message

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:75:19: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   75 |  if(changed.size()==n)ans*=n;
      |     ~~~~~~~~~~~~~~^~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 308 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 12 ms 2260 KB Output is correct
7 Correct 7 ms 704 KB Output is correct
8 Correct 20 ms 4052 KB Output is correct
9 Correct 7 ms 1492 KB Output is correct
10 Correct 29 ms 4604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 300 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 14 ms 2260 KB Output is correct
7 Correct 8 ms 852 KB Output is correct
8 Correct 21 ms 4036 KB Output is correct
9 Correct 7 ms 1596 KB Output is correct
10 Correct 28 ms 4564 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 3 ms 468 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 7 ms 724 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 308 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 304 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 308 KB Output is correct
6 Correct 1 ms 312 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 7 ms 724 KB Output is correct
12 Correct 7 ms 724 KB Output is correct
13 Correct 29 ms 4056 KB Output is correct
14 Correct 6 ms 700 KB Output is correct
15 Correct 36 ms 3696 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 264 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 384 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 304 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 47 ms 6728 KB Output is correct
10 Correct 37 ms 5512 KB Output is correct
11 Correct 13 ms 2516 KB Output is correct
12 Correct 16 ms 3020 KB Output is correct
13 Correct 4 ms 980 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 49 ms 6860 KB Output is correct
10 Correct 38 ms 5592 KB Output is correct
11 Correct 13 ms 2516 KB Output is correct
12 Correct 17 ms 3068 KB Output is correct
13 Correct 3 ms 852 KB Output is correct
14 Correct 63 ms 9296 KB Output is correct
15 Correct 70 ms 10440 KB Output is correct
16 Correct 10 ms 2132 KB Output is correct
17 Correct 45 ms 7140 KB Output is correct
18 Correct 23 ms 4172 KB Output is correct