Cod sursa(job #485523)

Utilizator SpiderManSimoiu Robert SpiderMan Data 18 septembrie 2010 17:15:19
Problema Plus Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
# include <algorithm>
using namespace std ;

# define x first
# define y second

typedef long long ll ;
const char FIN[] = "plus.in", FOU[] = "plus.out" ;

pair < int, int > V[3], C[3] ;
int S ;

inline int between(int x, int lft, int rgt) {
    return lft <= x && x <= rgt;
}

int main ( void ) {
    freopen ( FIN, "r", stdin ) ;

    scanf ( "%d", &S ) ;
    for ( int i = 0; i < 3; ++i ) {
        scanf ( "%d %d", &V[i].x, &V[i].y ) ;
        if ( V[i].y == -1 ) {
            C[i].x = -V[i].x ;
        } else {
            C[i].y = V[i].x ;
        }
    }

    ll sol = 0 ;

    for ( int i = 0; i <= V[0].x ; ++i ) {
        int aux = S - i * V[0].y ;
        if ( V[1].y == 0 ) {
            if ( V[2].y == 0) {
                sol += ( aux == 0 ) * ( ll ) ( V[1].x + 1 ) * ( V[2].x + 1 );
            } else {
                sol += ( C[2].x <= aux && aux <= C[2].y ) * ( V[1].x + 1 ) ;
            }
        } else {
            if ( V[2].y == 0 ) {
                sol += ( C[1].x <= aux && aux <= C[1].y ) * ( V[2].x + 1 ) ;
            } else {
                sol += max ( 0, min ( aux - C[1].x, C[2].y ) - max ( aux - C[1].y, C[2].x ) + 1 ) ;
            }
        }
    }

    fprintf ( fopen ( FOU, "w" ) , "%lld", sol ) ;
}