Pagini recente »
Diferențe pentru runda/oji-2023-antrenament-ffa-v2 între reviziile 40 și 5
|
Istoria paginii runda/simulare10
|
Diferențe pentru runda/oji-2023-antrenament-ffa-v2 între reviziile 7 și 40
|
Rating Pricope Petru Andrei (pkandrei)
|
Cod sursă (job #76648)
Cod sursă (job
#76648)
#include <stdio.h>
#include <stdlib.h>
#define N_MAX 200000
FILE * fin, * fout;
typedef struct _node {
struct _node *st, *dr;
} node;
node v[ N_MAX ], ans[ N_MAX ];
int srt[ N_MAX ], pos;
void sort( node* start ) { // Sortam
if( start != NULL ) {
sort( start -> st );
srt[ pos ++ ] = start - v;
sort( start -> dr );
}
}
int main( ) {
fin = fopen( "pointeri.in", "r" );
fout = fopen( "pointeri.out", "w" );
// Citire
int N, rad;
fscanf( fin, "%d%d", &N, &rad );
// Alocam pointerii
int i;
for( i = 0; i < N; i ++ ) {
v[ i ].dr = (node*)malloc(sizeof(node));
v[ i ].st = (node*)malloc(sizeof(node));
}
for( i = 0; i < N; i ++ ) { // Citire st
int tmp;
fscanf( fin, "%d", &tmp );
v[ i ].st = ( tmp == -1 ? NULL : v + tmp );
}
for( i = 0; i < N; i ++ ) { // Citire dr
int tmp;
fscanf( fin, "%d", &tmp );
v[ i ].dr = ( tmp == -1 ? NULL : v + tmp );
}
// Sortarea
sort( v + rad );
for( i = 0; i < N; i ++ ) { // Cream vectorul de raspuns
ans[ srt[ i ] ].st = ( i == 0 ? NULL : ans + srt[ i - 1 ] );
ans[ srt[ i ] ].dr = ( i == N - 1 ? NULL : ans + srt[ i + 1 ] );
}
// Afisare
fprintf( fout, "%d\n", srt[ 0 ] );
for( i = 0; i < N; i ++ ) {
fprintf( fout, "%d ", ans[ i ].st == NULL ? -1 : ans[ i ].st - ans );
}
fprintf( fout, "\n" );
for( i = 0; i < N; i ++ ) {
fprintf( fout, "%d ", ans[ i ].dr == NULL ? -1 : ans[ i ].dr - ans );
}
fclose( fin );
fclose( fout );
}