Submission #296025

#TimeUsernameProblemLanguageResultExecution timeMemory
296025BadrangiikhGondola (IOI14_gondola)C++14
100 / 100
52 ms2680 KiB
#include "gondola.h"
#include<bits/stdc++.h>
using namespace std;

int valid(int n, int inputSeq[])
{
  vector < pair < int , int > > vec ;
    vector < int > vc ;
    for ( int i = 0 ; i < n ; i ++ ) {
        if ( inputSeq [ i ] <= n ) {
            vec . push_back ( { inputSeq [ i ] , i } ) ;
        }
        vc . push_back ( inputSeq [ i ] ) ;
    }
    sort ( vc . begin ( ) , vc . end ( ) ) ;
    for ( int i = 1 ; i < vc . size ( ) ; i ++ ) {
        if ( vc [ i - 1 ] == vc [ i ] ) return 0 ;
    }
    sort ( vec . begin ( ) , vec . end ( ) ) ;
    for ( int i = 1 ; i < vec . size ( ) ; i ++ ) {
        if ( vec [ i ] . first - vec [ i - 1 ] . first != ( ( vec [ i ] . second - vec [ i - 1 ] . second ) % n + n ) % n ) {
            return 0 ;
        }
    }
    return 1 ; 
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
  int maxx , minn , indx , x ;
    vector < int > vec ; 
    vector < pair < int , int > > vc ; 
    minn = n + 1 ;
    for ( int i = 0 ; i < n ; i ++ ) {
        if ( minn > gondolaSeq [ i ] ) {
            indx = i ;
            minn = gondolaSeq [ i ] ;
        }
        maxx = max ( maxx , gondolaSeq [ i ] ) ;
    }
    if ( minn <= n ) {
        for ( int i = ( n + indx - minn ) % n + 1 ; i <= ( n + indx - minn ) % n + n ; i ++ ) {
            vc . push_back ( { gondolaSeq [ i % n ] , i - ( ( n + indx - minn ) % n + 1 ) } ) ;
        }
    }
    else {
        for ( int i = 0 ; i < n ; i ++ ) {
            vc . push_back ( { gondolaSeq [ i ] , i } ) ;
        }
    }
    sort ( vc . begin ( ) , vc . end ( ) ) ;
    x = n + 1 ;
    for ( int i = 0 ; i < vc . size ( ) ; i ++ ) {
        if ( vc [ i ] . first == vc [ i ] . second + 1 ) continue ;
        vec . push_back ( vc [ i ] . second + 1 ) ;
        for ( int j = x ; j <= vc [ i ] . first - 1 ; j ++ ) {
            vec . push_back ( j ) ;
        }
        x = vc [ i ] . first + 1 ;
    } 
    for ( int i = 0 ; i < vec . size ( ) ; i ++ ) {
        replacementSeq [ i ] = vec [ i ] ;
    }
    return maxx - n ;
}

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

long long zeregt ( int s1 , int s2 ) {
    long long zer [ 45 ] ;
  long long mod1 = 1e9+9 ;
    zer [ 0 ] = s1 ;
    for ( int i = 1 ; i <= 30 ; i ++ ) {
        zer [ i ] = zer [ i - 1 ] * zer [ i - 1 ] ;
        zer [ i ] %= mod1 ;
    }
    long long s3 = 1 ;
    for ( int i = 0 ; i <= 30 ; i ++ ) {
        if ( s2 % 2 == 1 ) {
            s3 *= zer [ i ] ;
            s3 %= mod1 ;
        }
        s2 /= 2 ;
    }
    return s3 ;
}

int countReplacement(int n, int inputSeq[])
{
	long long ans , mod ;
  int x , y , z , maxx , minn , indx ;
  vector < int > ch , vec , vc ;
  vector < pair < int , int > > hc ; 
	if ( valid( n , inputSeq ) == 0 ) return 0 ;
    for ( int i = 0 ; i < n ; i ++ ) {
        vc . push_back ( inputSeq [ i ] ) ;
    }
    sort ( vc . begin ( ) , vc . end ( ) ) ;
    mod = 1000000009 ;
    ans = 1 ;
    x = n ;
    for ( int i = 0 ; i < n ; i ++ ) {
        if ( vc [ i ] <= n ) {
            continue ;
        }
        y = n - i ;
        z = vc [ i ] - x - 1 ;
        ans *= ( zeregt ( y , z ) % mod ) ;
        ans %= mod ;
        x = vc [ i ] ;
    }
    if ( vc [ 0 ] > n ) {
    	ans *= n ;
    	ans %= mod ;
	}
    return ans ;
}

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:16:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |     for ( int i = 1 ; i < vc . size ( ) ; i ++ ) {
      |                       ~~^~~~~~~~~~~~~~~
gondola.cpp:20:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   20 |     for ( int i = 1 ; i < vec . size ( ) ; i ++ ) {
      |                       ~~^~~~~~~~~~~~~~~~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:55:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |     for ( int i = 0 ; i < vc . size ( ) ; i ++ ) {
      |                       ~~^~~~~~~~~~~~~~~
gondola.cpp:63:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |     for ( int i = 0 ; i < vec . size ( ) ; i ++ ) {
      |                       ~~^~~~~~~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:93:19: warning: unused variable 'maxx' [-Wunused-variable]
   93 |   int x , y , z , maxx , minn , indx ;
      |                   ^~~~
gondola.cpp:93:26: warning: unused variable 'minn' [-Wunused-variable]
   93 |   int x , y , z , maxx , minn , indx ;
      |                          ^~~~
gondola.cpp:93:33: warning: unused variable 'indx' [-Wunused-variable]
   93 |   int x , y , z , maxx , minn , indx ;
      |                                 ^~~~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:44:27: warning: 'indx' may be used uninitialized in this function [-Wmaybe-uninitialized]
   44 |         for ( int i = ( n + indx - minn ) % n + 1 ; i <= ( n + indx - minn ) % n + n ; 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...