//--------------------------------------------------------------------------- #include #include #pragma hdrstop //--------------------------------------------------------------------------- int N; int *M; #pragma argsused void leeEntrada() { int i; FILE *in = fopen( "input.txt", "r" ); fscanf( in, "%d\n", &N ); M = new int[N]; for( i = 0; i < N; i++ ) fscanf( in, "%d", &M[i] ); fclose( in ); } /* void hazEntradaRandom() { int i; N = random( 10000 ) + 1; M = new int[N]; for( i = 0; i < N; i++ ) M[i] = random( N-1 ); } */ int calculaMayor() { int i, tmp, count; for( i = N-1; i >= 0; i-- ) { tmp = M[i]; count = 0; while( tmp != 0 && count < N+1 ) { tmp = M[tmp]; count++; } if( tmp == 0 ) return i; } return -1; } void escribeSolucion( int best ) { FILE *out = fopen( "output.txt", "w" ); fprintf( out, "%d", best ); fclose( out ); } /* void escribeEntrada() { int i; FILE *in = fopen( "input.txt", "w" ); fprintf( in, "%d\n", N ); for( i = 0; i < N-1; i++ ) fprintf( in, "%d ", M[i] ); fprintf( in, "%d", M[N-1] ); fclose( in ); } */ int main(int argc, char* argv[]) { //randomize(); //hazEntradaRandom(); leeEntrada(); int best = calculaMayor(); //if( best > 0 ) // escribeEntrada(); escribeSolucion( best ); delete[] M; return 0; } //---------------------------------------------------------------------------