Submission #291578

#TimeUsernameProblemLanguageResultExecution timeMemory
291578davi_bartGondola (IOI14_gondola)C++14
55 / 100
25 ms2380 KiB
#include<bits/stdc++.h> #include "gondola.h" using namespace std; #define ll long long #define fi first #define se second int valid(int n, int inputSeq[]){ int mi=1e9,pos=0; vector<int> k; for(int i=0;i<n;i++)k.push_back(inputSeq[i]); sort(k.begin(),k.end()); for(int i=1;i<n;i++){ if(k[i]==k[i-1])return 0; } for(int i=0;i<n;i++)k[i]=inputSeq[i]; for(int i=0;i<n;i++){ if(k[i]<mi){ mi=k[i]; pos=i; } } if(mi>n)return 1; pos-=mi-1; pos=(pos+2*n)%n; int cur=0; for(int i=pos;i<pos+n;i++){ cur++; int x=i%n; if(k[x]>n)continue; if(k[x]!=cur)return 0; } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]){ vector<int> k(n); for(int i=0;i<n;i++)k[i]=gondolaSeq[i]; int mi=1e9,pos=0; for(int i=0;i<n;i++){ if(k[i]<mi){ mi=k[i]; pos=i; } } pos=((pos-mi+1)%n+n*2)%n; vector<pair<int,int> >repl; int cur=0; for(int i=pos;i<pos+n;i++){ cur++; int x=i%n; if(k[x]==cur)continue; repl.push_back({k[x],cur}); } sort(repl.begin(),repl.end()); vector<int> ans; int prec=n; for(int i=0;i<repl.size();i++){ ans.push_back(repl[i].second); prec++; while(prec<repl[i].first){ ans.push_back(prec); prec++; } } for(int i=0;i<ans.size();i++)replacementSeq[i]=ans[i]; return ans.size(); } //---------------------- const ll mod=1e9+9; ll pot(ll a,ll b){ if(b==0)return 1; ll x=pot(a,b/2); if(b%2)return x*x%mod*a%mod; return x*x%mod; } int countReplacement(int n, int inputSeq[]){ if(valid(n,inputSeq)==0)return 0; vector<int> k(n); for(int i=0;i<n;i++)k[i]=inputSeq[i]; int mi=1e9,pos=0; for(int i=0;i<n;i++){ if(k[i]<mi){ mi=k[i]; pos=i; } } ll sol=1; if(mi>n){ sol=n; } pos=((pos-mi+1)%n+n*2)%n; vector<ll>repl; int cur=0; for(int i=pos;i<pos+n;i++){ cur++; int x=i%n; if(k[x]==cur)continue; repl.push_back(k[x]); } if(repl.size()==0)return 0; sort(repl.begin(),repl.end()); for(int i=repl.size()-2;i>=0;i--){ sol*=pot(repl.size()-i-1,repl[i+1]-repl[i]-1); sol%=mod; } sol*=pot(repl.size(),repl[0]-n-1); sol%=mod; return sol; }

Compilation message (stderr)

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:61:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   61 |   for(int i=0;i<repl.size();i++){
      |               ~^~~~~~~~~~~~
gondola.cpp:69:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |   for(int i=0;i<ans.size();i++)replacementSeq[i]=ans[i];
      |               ~^~~~~~~~~~~
#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...