Submission #291575

#TimeUsernameProblemLanguageResultExecution timeMemory
291575davi_bartGondola (IOI14_gondola)C++14
55 / 100
25 ms2388 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;
    }
  }
  pos=((pos-mi+1)%n+n*2)%n;
  vector<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]);
  }
  if(repl.size()==0)return 0;
  sort(repl.begin(),repl.end());
  vector<int> ans;
  ll sol=1;
  int prec=n;
  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];
      |               ~^~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:105:7: warning: unused variable 'prec' [-Wunused-variable]
  105 |   int prec=n;
      |       ^~~~
#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...