Submission #212657

#TimeUsernameProblemLanguageResultExecution timeMemory
212657mohamedsobhi777Gondola (IOI14_gondola)C++14
60 / 100
35 ms2288 KiB
#include <bits/stdc++.h> #include "gondola.h" using namespace std ; long long mod = 1e9 + 7 ; const int N = 3e5 + 7 ; int valid(int n, int inputSeq[]){ vector<int> vis(N , 0) ; int cur = inputSeq[0] -1 ; for(int i = 0 ; i < n; i++){ if(vis[inputSeq[i]]++)return 0 ; if(--inputSeq[i]!=cur) return 0 ; cur = (cur+1) %n ; } return 1 ; } int ab[N] ; int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int proto[N] ; for(int i = 0 ; i <n; i++)proto[i] = i+1 ; for(int i = 0 ; i <n; i++){ if(gondolaSeq[i] <=n){ int k = gondolaSeq[i] +1; proto[i] = gondolaSeq[i] ; if(k==n+1)k=1 ; for(int j = 1 ; j < n ;j++){ int loc = (i+j)%n; proto[loc] = k++ ; if(k==n+1)k = 1 ; } break; } } int cur = 0 , ladder = n +1; vector< pair<int, int > > q ; for(int i = 0 ; i < n ;i++){ q.push_back({gondolaSeq[i] , proto[i]}); } sort(q.begin(), q.end()) ; for(int i= 0 ; i < n; i++){ int fr = q[i].first , se = q[i] .second ; while(se < fr){ replacementSeq[cur++] = se ; se = ladder ++ ; } } return cur ; } long long fas(long long a , long long b){ if(!b)return 1ll ; long long ret = fas(a , b/2) ; ret = (ret*ret)%mod ; if(b%2) ret = (ret*a)%mod ; return ret ; } long long mul(long long a , long long b){ return (1ll * a * b) % mod ; } int countReplacement(int n, int inputSeq[]) { map<int , bool > mp ; for(int i = 0 ; i < n;i++){ if(mp[inputSeq[i]])return 0 ; mp[inputSeq[i]] = 1 ; } long long ret = 1ll ; int proto[N] ; for(int i = 0 ; i <n; i++)proto[i] = i+1 ; for(int i = 0 ; i <n; i++){ if(inputSeq[i] <=n){ int k = inputSeq[i] +1; proto[i] = inputSeq[i] ; if(k==n+1)k=1 ; for(int j = 1 ; j < n ;j++){ int loc = (i+j)%n; proto[loc] = k++ ; if(inputSeq[loc] <=n && proto[loc]!=inputSeq[loc]) return 0 ; if(k==n+1)k = 1 ; } break; } } int cur = 0 , ladder = n +1; vector< pair<int, int > > q ; for(int i = 0 ; i < n ;i++){ q.push_back({inputSeq[i] , proto[i]}); } sort(q.begin(), q.end()) ; long long base = n ; for(int i= 0 ; i < n; i++){ int fr = q[i].first , se = q[i] .second ; if(fr==se){ base-- ; continue ; } ret = mul(ret , fas(base , fr - ladder)); ladder = fr+1 ; base-- ; } return ret ; }

Compilation message (stderr)

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:98:9: warning: unused variable 'cur' [-Wunused-variable]
     int cur = 0 , ladder = n +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...