Pagini recente » Cod sursa (job #247092) | TVShow | Cod sursa (job #1486591) | Cod sursa (job #417445) | Cod sursa (job #965764)
Cod sursa(job #965764)
#include <iostream>
#include <fstream>
using namespace std;
long long result;
long long sum, x[4], y[4], S;
int main()
{
ifstream f ("plus.in");
f>>S;
int i;
long long aux1, aux2, left, right;
for (i=1; i<=3; i++)
{
f>>x[i]>>y[i];
}
f.close();
for (i=0; i<=x[1]; i++)
{
sum = S - i*y[1]; /// din S scad i de y[1] si pe sum incerc sa il obtin cu y[2] si y[3]
if (y[2] == 0 && y[3] == 0) /// daca sunt aman2 0 atunci
{
if (sum == 0) /// sum trebuie sa fie si el 0
result += (x[2] + 1) * (x[3] + 1); /// din fiecare multime de 0 pot sa pun x[2] respectiv x[3] de 0 sau pot sa aleg sa nu pun nimic
continue;
}
if (y[2] != 0 && y[3] == 0)/// daca a 3a e 0
{
sum = sum * y[2];/// sum trebuie sa aiba acelasi semn cu a 2a ( 0<= sum) si sum trebuie sa fie <= x[2] ca sa pot forma suma
if (0 <= sum && sum <= x[2])
result += (x[3] + 1); /// x[3] + 1 pentru ca pot sa pun x[3] de 0 sau pot sa nu pun nimic
continue;
}
if (y[2] == 0 && y[3] != 0) /// daca a 2a e 0
{
sum = sum * y[3]; /// sum trebuie sa aiba acelasi semn cu a 3a ( 0<= sum) si sum trebuie sa fie <= x[3] ca sa pot forma suma
if (0 <= sum && sum <= x[3])
result += (x[2] + 1); /// x[2] + 1 pentru ca pot sa pun x[2] de 0 sau pot sa nu pun nimic
continue;
}
if (y[2] != 0 && y[3] != 0) /// daca nu-i niciuna 0
{
aux1 = (sum - 0*y[2])*y[3];
aux2 = (sum - x[2]*y[2])*y[3];
left = min (aux1, aux2);
right = max (aux1, aux2);
left = max (0LL, left);
right = min (x[3], right);
/// am intersectat [left, right] cu [0, x[3]], unde
/// [left, right] este intervalul din care ia valori coeficientul lui y[3]
/// atunci cand coeficientul lui y[2] ia valori in intervalul [0, x[2]]
if (left <= right)
result += (right - left + 1);
}
}
ofstream g("plus.out");
g<<result<<"\n";
g.close();
return 0;
}