Cod sursa(job #44166)

Utilizator cos_minBondane Cosmin cos_min Data 30 martie 2007 22:12:29
Problema Schi Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.12 kb
#include <stdio.h>
#include <deque>
using namespace std;

#define in "schi.in"
#define out "schi.out"
#define dim 30001

int N;
int A[dim], aux[dim];
deque<int> P;
deque<int>::iterator it;

int main()
{
    char linie[11];
    //freopen(in,"r",stdin);
    int j, auxiliar, z, i, size;
    FILE *fin = fopen(in,"r");
    freopen(out,"w",stdout);
    
    fscanf(fin,"%d", &N);
    fscanf(fin,"\n");
    
    for ( i = 1; i <= N; i++ )
    {
        fgets(linie,10,fin);
        auxiliar = 0;
        j = 0;
        while ( linie[j] >= '0' && linie[j] <= '9' ) auxiliar *= 10, auxiliar += (int)linie[j]-48, j++;
        A[i] = auxiliar;
    }
        //scanf("%d", &A[i]);
    
    P.push_back(1);
    for ( i = 2; i <= N; i++ ) 
    {
        if ( A[i] > P.size() ) P.push_back(i);
        else
        {
            size = P.size()-A[i]+1;
            if ( A[i] == 1 ) P.push_front(i);
            else if ( P.size()-A[i]+1 < A[i]-1 ) // sterg de la dreapta la stanga
            {
                 //printf("1 %d|", size );
                 for ( it = P.end()-1, z = 1; z <= size; it--, z++ )
                 {
                    // printf("%d ", *it);
                     aux[z] = *it;
                     P.pop_back();
                 }
                 P.push_back(i);
                 for ( j = size; j >= 1; j-- )
                     P.push_back(aux[j]);
                 //printf(" | ");
            }
            else                          // sterg de la stanga la dreapta
            {
                // printf("2 |");
                 for ( it = P.begin(), z = 1; z < A[i]; it++, z++ )
                 {
                     aux[z] = *it;
                     P.pop_front();
                 }
                 P.push_front(i);
                 for ( j = z-1; j >= 1; j-- )
                     P.push_front(aux[j]);
                
            }
        }
       /* for ( it = P.begin(); it != P.end(); it++ )
            printf("%d ", *it);
        
        printf("\n");*/
    }
    
    for ( it = P.begin(); it != P.end(); it++ )
        printf("%d\n", *it);
}