Cod sursa(job #605584)

Utilizator SpiderManSimoiu Robert SpiderMan Data 1 august 2011 12:02:15
Problema Cele mai apropiate puncte din plan Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.61 kb
# include <cstdio>

# define min(a, b) ((a) < (b) ? (a) : (b))
# define max(a, b) ((a) > (b) ? (a) : (b))

const char *FIN = "ape.in", *FOU = "ape.out" ;
const int MAX = 10005 ;

char S[MAX] ;
int P, P1x, P1y, P2x, P2y, Ar ;

int main ( void ) {
    fscanf ( fopen ( FIN, "r" ) , "%d %s", &P, S ) ;

    for ( int i = 1, x = 0, y = 0; i <= P; ++i ) {
        int act = ( i == P ? S[0] : S[i] ), prec = S[i - 1] ;
        if ( prec == 'N' ) {
            if ( act == 'N' ) {
                Ar -= x + 1, ++y ;
            } else if ( act == 'E' ) {
                ++x ;
            } else if ( act == 'V' ) {
                Ar -= x-- + 1 ;
            }
        } else if ( prec == 'V' ) {
            if ( act == 'N' ) {
                ++y ;
            } else if ( act == 'V' ) {
                --x ;
            } else if ( act == 'S' ) {
                Ar += x, --y ;
            }
        } else if ( prec == 'S' ) {
            if ( act == 'S' ) {
                Ar += x, --y ;
            } else if ( act == 'V' ) {
                --x ;
            } else if ( act == 'E' ) {
                Ar += x++ ;
            }
        } else {
            if ( act == 'S' ) {
                --y ;
            } else if ( act == 'E' ) {
                ++x ;
            } else if ( act == 'N' ) {
                Ar -= x + 1, ++y ;
            }
        }

        P1x = max ( P1x, x ), P2x = min ( P2x, x ) ;
        P1y = max ( P1y, y ), P2y = min ( P2y, y ) ;
    }
    fprintf ( fopen ( FOU, "w" ), "%d %d %d %d", P1x - P2x - 1, P1y - P2y - 1, Ar < 0 ? 1 : 0, Ar < 0 ? -P -Ar : Ar ) ;
}