Submission #195591

# Submission time Handle Problem Language Result Execution time Memory
195591 2020-01-16T15:08:45 Z oscarsierra12 Gondola (IOI14_gondola) C++14
25 / 100
55 ms 5100 KB
#include "gondola.h"
#include <bits/stdc++.h>
using namespace std ;

typedef pair<int,int>          pii ;
int arr[300000] ;
const int MOD = 1e9+7 ;

int valid(int n, int inputSeq[])
{
  int x = min_element ( inputSeq, inputSeq+n ) - inputSeq ;
  vector <int> nwSeq ;
  set <int> rep ;
  for ( int i = x ; i < n ; ++i ) nwSeq.push_back ( inputSeq[i] ), rep.insert ( inputSeq[i] ) ;
  for ( int i = 0 ; i < x ; ++i ) nwSeq.push_back ( inputSeq[i] ), rep.insert ( inputSeq[i] ) ;
  int expected = inputSeq[x] ;
  int posible = ( (int)rep.size()==n ) ;
  for ( int i = 0 ; i < n ; ++i ) {
    if ( nwSeq[i] <= n ) {
        if ( nwSeq[i] != expected ) posible = 0 ;
        expected = nwSeq[i]+1 ;
    }
    else expected++ ;
  }
  return posible;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
  int x = min_element ( gondolaSeq, gondolaSeq+n ) - gondolaSeq ;
  int beg = 1 ;
  if ( gondolaSeq[x] <= n ) beg = gondolaSeq[x] ;
  if ( *max_element(gondolaSeq, gondolaSeq+n) > n ) return 1 ;
  vector <int> nwSeq ;
  for ( int i = x ; i < n ; ++i ) nwSeq.push_back ( gondolaSeq[i] ) ;
  for ( int i = 0 ; i < x ; ++i ) nwSeq.push_back ( gondolaSeq[i] ) ;
//  cout << beg << '\n' ;
  vector <pii> posib ;
  for ( int i = 0 ; i < n ; ++i ) {
    if ( nwSeq[i] != beg ) posib.push_back ( {nwSeq[i], beg} ) ;
    beg++ ;
    if ( beg > n ) beg = 1;
  }
  sort ( posib.begin(), posib.end() ) ;
  int ans = 0, id = 0;
  for ( auto i:posib ) {
//    cout << i.first << ' ' << i.second << '\n' ;
    replacementSeq[id] = i.second ;
    n++ ;
    ++ans ;
    while ( n < i.first ) {
        ++id ;
        replacementSeq[id] = n ;
        ++n ;
        ++ans ;
    }
    ++id ;
  }
  return ans;
}

long long fpow(long long base, long long power) {
    long long result = 1;
    while(power > 0) {

        if(power % 2 == 1) { // Can also use (power & 1) to make code even faster
            result = (result*base) % MOD;
        }
        base = (base * base) % MOD;
        power = power / 2; // Can also use power >>= 1; to make code even faster
    }
    return result;
}
//----------------------

int countReplacement(int n, int inputSeq[])
{
    if ( valid(n, inputSeq) == 0 ) return 0 ;
    if ( replacement (n,inputSeq,arr) == 0 ) return 1 ;
    sort ( inputSeq, inputSeq + n ) ;
    long long ans = 1 ;
    if ( inputSeq[0] > n ) ans = n ;
    int nRep = n ;
    for ( int i = 0 ; i < nRep ; ++i ) {
        long long cur = inputSeq[i] - n ;
        if ( cur <= 0 ) continue ;
        cur-- ;
        long long q = nRep-i ;
        n = inputSeq[i] ;
        ans *= (fpow(q,cur)%MOD) ;
        ans %= MOD;
    }
    return ans ;
}
/*
10
10
1 2 5644898 4 8489426 6 898894 8 948945 8946521*/

# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Correct 2 ms 380 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 312 KB Output is correct
4 Correct 2 ms 276 KB Output is correct
5 Correct 3 ms 376 KB Output is correct
6 Correct 14 ms 2420 KB Output is correct
7 Correct 41 ms 4080 KB Output is correct
8 Correct 32 ms 4276 KB Output is correct
9 Correct 10 ms 1656 KB Output is correct
10 Correct 31 ms 4848 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 2 ms 248 KB Output is correct
3 Correct 5 ms 376 KB Output is correct
4 Correct 3 ms 376 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 16 ms 2364 KB Output is correct
7 Correct 40 ms 4084 KB Output is correct
8 Correct 31 ms 4212 KB Output is correct
9 Correct 10 ms 1656 KB Output is correct
10 Correct 37 ms 4980 KB Output is correct
11 Correct 2 ms 376 KB Output is correct
12 Correct 2 ms 376 KB Output is correct
13 Correct 23 ms 2296 KB Output is correct
14 Correct 2 ms 256 KB Output is correct
15 Correct 55 ms 5100 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 5 ms 376 KB Integer 0 violates the range [1, 76]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 376 KB Integer 0 violates the range [1, 76]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 376 KB Integer 0 violates the range [1, 76]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 1 ms 256 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Incorrect 2 ms 504 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 248 KB Output is correct
4 Correct 2 ms 252 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Incorrect 2 ms 256 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 504 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 0 ms 256 KB Output is correct
7 Incorrect 2 ms 376 KB Output isn't correct
8 Halted 0 ms 0 KB -