#include int combina( int n, int k ) { if( n < 0 || k < 0 || k > n ) return 0; int comb = 1, i; int kMax, kMin; if( k > n/2 ) kMax = k; else kMax = n-k; for( i = n; i > kMax; i-- ) { comb *= i; comb /=( n-i+1 ); } return comb; } void leeEntrada( int *n, int *m, int *k1, int *k2, int *k3 ) { FILE *inn = fopen( "input.txt", "rt" ); fscanf( inn, "%d %d\n", n, m ); fscanf( inn, "%d %d %d", k1, k2, k3 ); fclose( inn ); } void escribeSalida( int total ) { FILE *outt = fopen( "output.txt", "wt" ); fprintf( outt, "%d", total ); fclose( outt ); } int main() { int n, m, k1, k2, k3; leeEntrada( &n, &m, &k1, &k2, &k3 ); // Contamos las formas de sumar a + b + c = n con a >= k1, b >= k2 y c >= k3 int total = combina( n + 2 - k1 - k2 - k3, 2 ); // Le restamos las combinaciones inválidas, es decir a > m, b > m, c > m total -= combina( n + 2 - (m+1) - k2 - k3, 2 ); total -= combina( n + 2 - k1 - (m+1) - k3, 2 ); total -= combina( n + 2 - k1 - k2 - (m+1), 2 ); escribeSalida( total ); return 0; }