Submission #1073275

#TimeUsernameProblemLanguageResultExecution timeMemory
1073275LudisseyGondola (IOI14_gondola)C++17
100 / 100
17 ms4656 KiB
#include <bits/stdc++.h> #include "gondola.h" #define int long long #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() using namespace std; const int mod=1e9+9; int MOD(int x){ return (x+mod)%mod; } int fast_pow(int n, int p){ if(p==1) return MOD(n); else if(p==0) return 1; else if(p%2==0){ int u=fast_pow(n,p/2); return MOD(u*u); }else{ return MOD(fast_pow(n,p-1)*n); } } signed valid(signed n, signed inputSeq[]){ vector<int> a; for (int i = 0; i < n; i++) { if(inputSeq[i]<=n) a.push_back(inputSeq[i]); } int c=0; for (int i = 0; i < sz(a); i++) { if(i==0){ if(a[sz(a)-1]==a[i]-1) { c++; } } else if(a[i-1]==a[i]-1) c++; } return (c==n-1); } signed replacement(signed n, signed gondolaSeq[], signed replacementSeq[]){ vector<pair<int,int>> a; vector<int> orig(n); pair<int,int> origNUMB={-1,-1}; for (int i = 0; i < n; i++) { if(gondolaSeq[i]<=n) { origNUMB={i,gondolaSeq[i]-1}; break; } } int dep=0; if(origNUMB.first>=0){ if(origNUMB.first<origNUMB.second) dep=origNUMB.second-origNUMB.first; else dep=origNUMB.second+(n-origNUMB.first); } for (int i = 0; i < n; i++) { if(origNUMB.first<0) orig[i]=i+1; else orig[i]=((i+dep)%n)+1; } for (int i = 0; i < n; i++) { if(gondolaSeq[i]>n) a.push_back({gondolaSeq[i],orig[i]}); } if(sz(a)==0) return 0; sort(all(a)); vector<int> toa; int lst=n; for (int i = 0; i < sz(a); i++) { lst++; int rem=(a[i].first-lst)-1; toa.push_back(a[i].second); while(rem>=0){ toa.push_back(lst); lst++; rem--; } } for (int i = 0; i < sz(toa); i++) { replacementSeq[i]=toa[i]; } return (int)(a.back().first-n); } signed countReplacement(signed n, signed inputSeq[]){ vector<pair<int,int>> a; vector<int> orig(n); pair<int,int> origNUMB={-1,-1}; for (int i = 0; i < n; i++) { if(inputSeq[i]<=n) { origNUMB={i,inputSeq[i]-1}; break; } } int dep=0; if(origNUMB.first>=0){ if(origNUMB.first<origNUMB.second) dep=origNUMB.second-origNUMB.first; else dep=origNUMB.second+(n-origNUMB.first); } for (int i = 0; i < n; i++) { if(origNUMB.first<0) orig[i]=i+1; else orig[i]=((i+dep)%n)+1; } bool inv=false; for (int i = 0; i < n; i++){ if(inputSeq[i]<=n&&inputSeq[i]!=orig[i]) { inv=true; break; } } if(inv) return 0; for (int i = 0; i < n; i++) { if(inputSeq[i]>n) a.push_back({inputSeq[i],orig[i]}); } if(sz(a)==0) return 1; sort(all(a)); int sm=1; int lst=n+1; for (int i = 0; i < sz(a); i++) { sm=MOD(sm*fast_pow(sz(a)-i,(a[i].first-lst))); lst=a[i].first+1; } int ex=1; if(origNUMB.first<0){ sm=MOD(sm*n); } return (int)MOD(sm); }

Compilation message (stderr)

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:116:9: warning: unused variable 'ex' [-Wunused-variable]
  116 |     int ex=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...