Pagini recente » Istoria paginii monthly-2014/runda-7/solutii | Cod sursa (job #3254985) | Sedinta 2007-05-07 | Cod sursa (job #3292451) | Cod sursa (job #2090809)
#include <cstdio>
inline int min2(int a, int b){
return a < b ? a : b;
}
inline int max2(int a, int b){
return a > b ? a : b;
}
inline long long nrv(int n, int a, int b, int c, int d){
int aux;
if(b > d){
aux = a; a = c; c = aux;
aux = b; b = d; d = aux;
}
if(b == -1){
if(d == -1){
if(-n > a + c)
return 0;
return max2(0, min2(min2(a, c), -n) + 1);
}
else if(d == 0){
if(-n > a)
return 0;
return c + 1;
}
else{
if(n < 0)
a += n;
else
c -= -n;
return max2(0, min2(a, c) + 1);
}
}
else if(b == 0){
if(d == 0)
return 1LL * (a + 1) * (c + 1) * (n == 0);
else
return (a + 1) * (c >= n && n >= 0);
}
else{
if(n > a + c)
return 0;
return max2(0, min2(min2(a, c), n) + 1);
}
}
int main(){
FILE *in = fopen("plus.in", "r");
int n, a, b, c, d, e, f, i;
long long rez = 0;
fscanf(in, "%d%d%d%d%d%d%d", &n, &a, &b, &c, &d, &e, &f);
for(i = 0; i <= a; i++)
rez += nrv(n - i * b, c, d, e, f);
fclose(in);
FILE *out = fopen("plus.out", "w");
fprintf(out, "%lld", rez);
fclose(out);
return 0;
}