Submission #422810

#TimeUsernameProblemLanguageResultExecution timeMemory
422810APROHACKGondola (IOI14_gondola)C++14
60 / 100
27 ms2240 KiB
#include "gondola.h"
#include <bits/stdc++.h>
#define PB push_back
#define S second
#define F first
using namespace std;

int valid(int n, int inputSeq[])
{
  bool ocurr[250001];
  for(int i = 0 ; i < 250001 ; i++){
    ocurr[i]=false;
  }
  //bool pst=false;
  int cur=-1;
  for(int i = 0 ; i < n ; i++){
    if(ocurr[inputSeq[i]]){
      return 0;
    }
    ocurr[inputSeq[i]]=true;
    if(inputSeq[i]<=n){
      if(cur==-1){
        cur=inputSeq[i];
      }else{
        if(inputSeq[i]!=cur)return 0;
      }
    }
    if(cur!=-1)cur++;
    if(cur==n+1)cur=1;
  }
  return 1;
}

//----------------------

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
  int pos=-1;
  vector<pair<int, int> >wow;
  int mascara[n];
  for(int i = 0 ; i < n ; i++){
    if(gondolaSeq[i]>n){
      wow.PB({gondolaSeq[i], i});
    }else{
      pos=i;
    }
  }
  int cur=gondolaSeq[pos];
  for(int i = pos ; i >=0 ; i--){
    mascara[i]=cur;
    cur--;
    if(cur==0)cur=n;
  }
  cur=gondolaSeq[pos];
  for(int i = pos ; i <n ; i++){
    mascara[i]=cur;
    cur++;
    if(cur==n+1)cur=1;
  }
  int l, p=n+1, indx=0;
  sort(wow.begin(), wow.end());//numero, indice
  for(int i = 0 ; i < wow.size(); i++){
    while(mascara[wow[i].S]<wow[i].F){
      replacementSeq[indx]=mascara[wow[i].S];
      mascara[wow[i].S]=p;
      //cout<<replacementSeq[indx]<<endl;
      p++;
      indx++;
    }
  }
  return indx;
}

//----------------------
long long pot(int bas, int exp){
  if(exp==1)return bas;
  if(exp==0)return 1;
  long long ret=pot(bas, exp/2);
  if(exp%2==0)return (ret*ret)%1000000009;
  return ((ret*ret)%1000000009)*bas;
}
int countReplacement(int n, int inputSeq[])
{
  if(valid(n, inputSeq)==0)return 0;
  vector<int >whew;
  int mxcur=n;
  bool fixed=false;
  for(int i = 0 ; i < n ; i++){
    if(inputSeq[i]>n){
      whew.PB(inputSeq[i]);
    }else{
      fixed=true;
    }
  }
  long long rta = 1, MOD = 1000000009;
  sort(whew.begin(), whew.end());
  for(int i = 0 ; i < whew.size() ; i++){
    int nxt=(whew[i]), nums;
    nums=(nxt-1)-(mxcur);
    if(nums!=0&&(whew.size()-i)>1)rta*=pot((nums), whew.size()-i)%MOD;
    rta%=MOD;
    mxcur=nxt;
    //wow.pop();
  }
  if(!fixed){
    rta*=n;
    rta%=MOD;
  }
  return rta;
}

Compilation message (stderr)

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:62:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |   for(int i = 0 ; i < wow.size(); i++){
      |                   ~~^~~~~~~~~~~~
gondola.cpp:60:7: warning: unused variable 'l' [-Wunused-variable]
   60 |   int l, p=n+1, indx=0;
      |       ^
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:97:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   97 |   for(int i = 0 ; i < whew.size() ; 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...