제출 #256516

#제출 시각아이디문제언어결과실행 시간메모리
256516PedroBigMan곤돌라 (IOI14_gondola)C++14
100 / 100
38 ms5044 KiB
#include "gondola.h" #include <iostream> #include <vector> #include <cmath> #include <algorithm> #include <string> #include <map> #include <unordered_map> #include <set> #include <unordered_set> #include <queue> #include <deque> #include <list> #include <iomanip> #include <stdlib.h> #include <time.h> #include <cstring> using namespace std; typedef long long int ll; typedef unsigned long long int ull; typedef long double ld; #define REP(i,a,b) for(ll i=(ll) a; i<(ll) b; i++) #define pb push_back #define mp make_pair #define pl pair<ll,ll> #define ff first #define ss second #define whole(x) x.begin(),x.end() #define DEBUG(i) cout<<"Pedro Is The Master "<<i<<endl #define INF 500000000LL #define EPS 0.00000001 #define pi 3.14159 ll mod=1000000009LL; template<class A=ll> void Out(vector<A> a) {REP(i,0,a.size()) {cout<<a[i]<<" ";} cout<<endl;} ll fastexp(ll a,ll e) { if(e==0) {return 1LL;} if(e%2LL==0) { ll v=fastexp(a,(ll) e/2LL); return (v*v)%mod; } else { ll v=fastexp(a,(ll) e/2LL); return (((v*v)%mod)*a)%mod; } } int valid(int n, int inputSeq[]) { ll N=(ll) n; vector<ll> s; REP(i,0,N) {s.pb((ll) inputSeq[i]);} vector<ll> copy = s; sort(whole(copy)); REP(i,0,N-1) {if(copy[i]==copy[i+1]) {return 0;}} REP(i,0,N) {if(s[i]>N) {s[i]=-1;} else {s[i]--;}} ll fi=-1; REP(i,0,N) {if(s[i]!=-1) {fi=i; break;}} if(fi==-1) {return 1;} REP(i,0,N) { if(s[i]==-1) {continue;} if(((s[i]-i)-(s[fi]-fi))%N!=0) {return 0;} } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int r[]) { ll N =(ll) n; vector<ll> s; REP(i,0,N) {s.pb((ll) gondolaSeq[i]);} REP(i,0,N) { if(s[i]<=N) { ll shift = (s[i]-1LL-i)%N; //shift to the right vector<ll> copy_s; REP(j,0,N) {copy_s.pb(s[(j-shift+N)%N]);} s=copy_s; break; } } ll max_ind = (ll) (max_element(whole(s))-s.begin()); ll R = s[max_ind]-N; unordered_map<ll,ll> m; REP(i,0,N) {m[s[i]]=i;} ll last = max_ind+1; REP(i,0,R) { ll val = N+i+1; unordered_map<ll,ll>::iterator it = m.find(val); if(it==m.end()) {r[i]=last; last=val;} else if(m[val]!=max_ind) {r[i]=m[val]+1;} else {r[i]=last; last=val;} } return R; } //---------------------- int countReplacement(int n, int inputSeq[]) { if(!valid(n,inputSeq)) {return 0;} ll N =(ll) n; vector<ll> s; REP(i,0,N) {s.pb((ll) inputSeq[i]);} vector<ll> p; REP(i,0,N) {if(s[i]<=N) {continue;} p.pb(s[i]-N);} sort(whole(p)); REP(i,0,p.size()) {p[i]-=(i+1);} ll ans=1LL; ll last=0LL; REP(i,0,p.size()) { ll val = fastexp(p.size()-i,p[i]-last); ans*=val; ans%=mod; last=p[i]; } if(*min_element(whole(s))>N) {ans*=N;} ans+=mod; ans%=mod; return ans; }
#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...