Submission #489290

#TimeUsernameProblemLanguageResultExecution timeMemory
489290QuantumK9Gondola (IOI14_gondola)C++17
55 / 100
30 ms4528 KiB
#include "gondola.h"
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair

using namespace std;

int valid(int n, int inputSeq[]){

  ll mx = n;

  set<ll> memo;

  ll i = 0;
  ll expectedVal;
  while ( i < n ){

    ll use = inputSeq[i];
    i++;

    if ( memo.find(use) != memo.end() ){ return 0; }

    memo.insert( use );

    mx = max( mx, use );

    if ( use <= n ){ expectedVal = use; break; }
    
  }

  for ( ; i < n; i++ ){

    expectedVal++; if( expectedVal > n ){ expectedVal -= n; }

    //cout << inputSeq[i] << " " << expectedVal << endl;

    ll use = inputSeq[i];

    if ( use <= n ){
      if ( use != expectedVal ){ return 0; }
    }
    
    if ( memo.find(use) != memo.end() ){ return 0; }
    memo.insert( use );
    mx = max( mx, use );

  }

  //for( ll j = n+1; j <= mx; j++ ){ if ( memo.find(j) == memo.end() ){ return 0; } }


  return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[]){
  
  vector< pair<ll, ll> > makeAyos;  // newVal, expectedVal

  ll i = 0;

  ll expectedVal = -1;

  while ( i < n ){
    ll u = gondolaSeq[i];

    if ( u <= n ){ expectedVal = u; break; }

    i++;
  }

  // case 1 -- > at least one default value remains
  if ( expectedVal != -1 ){
    expectedVal -= i;
    if ( expectedVal <= 0 ){ expectedVal += n; }
  }
  // case 2 -- > no more default values remain
  else{
    expectedVal = 1;
  }

  //cout << "ev: " << expectedVal << endl;

  for( int j = 0; j < n; j++ ){

    if ( gondolaSeq[j] != expectedVal ){
      makeAyos.pb ( mp( gondolaSeq[j], expectedVal ) );
    }

    expectedVal++; if ( expectedVal > n ){ expectedVal -= n; }
  }

  sort( makeAyos.begin(), makeAyos.end());

  // for( int l = 0; l < makeAyos.size(); l++ ){
  //   cout << makeAyos[l].first << " " << makeAyos[l].second << endl;
  // }

  ll cnt = 0;

  ll replacementVal = n+1;

  for( int k = 0; k < makeAyos.size(); k++ ){

    // at least one do-up
    replacementSeq[ cnt ] = makeAyos[k].second;
    cnt++;
    replacementVal++;

    while ( replacementVal <= makeAyos[k].first ){

      replacementSeq[ cnt ] = replacementVal-1;

      cnt++;

      replacementVal++;

    }

  }

  return cnt;

}

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

int countReplacement(int n, int inputSeq[])
{
  return -3;
}

Compilation message (stderr)

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