Pagini recente » Cod sursa (job #3148075) | Cod sursa (job #308402) | Cod sursa (job #1916811) | Cod sursa (job #3278960) | Cod sursa (job #2883216)
#include <fstream>
#define smax 100000
using namespace std;
unsigned long long p1, p2, u[4][3 * smax + 5], mu[4][3 * smax + 5], smen[3 * smax + 5];
unsigned long long zero, unu[4], minus_unu[4];
int main()
{
ifstream cin ("plus.in");
ofstream cout ("plus.out");
unsigned long long s, nrb, i, j, cnt = 0;
int nr;
cin >> s;
for (i = 1; i <= 3; i++)
{
cin >> nrb >> nr;
if (nr == 0)
zero++;
else if (nr == 1)
unu[++p1] = nrb;
else if (nr == -1)
minus_unu[++p2] = nrb;
}
u[0][0] = 1;
for (i = 1; i <= 3; i++)
{
for (j = 0; j <= 3 * smax; j++)
smen[j] = 0;
for (j = 0; j <= 3 * smax; j++)
if (u[i - 1][j] != 0)
smen[j] += u[i - 1][j], smen[j + unu[i] + 1] -= u[i - 1][j];
u[i][0] = smen[0];
for (j = 1; j <= 3 * smax; j++)
u[i][j] = u[i][j - 1] + smen[j];
}
mu[0][0] = 1;
for (i = 1; i <= 3; i++)
{
for (j = 0; j <= 3 * smax; j++)
smen[j] = 0;
for (j = 0; j <= 3 * smax; j++)
if (mu[i - 1][j] != 0)
smen[j] += mu[i - 1][j], smen[j + minus_unu[i] + 1] -= mu[i - 1][j];
mu[i][0] = smen[0];
for (j = 1; j <= 3 * smax; j++)
mu[i][j] = mu[i][j - 1] + smen[j];
}
i = s;
while (u[3][i])
{
if (mu[3][i - s])
cnt += u[3][i] * mu[3][i - s];
i++;
}
cout << cnt;
return 0;
}