Pagini recente » Cod sursa (job #1715382) | Diferente pentru implica-te/arhiva-educationala intre reviziile 113 si 223 | Cod sursa (job #2748647) | Cod sursa (job #2259756) | Cod sursa (job #2883203)
#include <fstream>
#define smax 100000
#define int unsigned long long
using namespace std;
int p1, p2, u[4][3 * smax + 1], mu[4][3 * smax + 1], smen[3 * smax + 1];
int zero, unu[4], minus_unu[4];
signed main()
{
ifstream cin ("plus.in");
ofstream cout ("plus.out");
int s, nrb, nr, i, j, cnt = 0;
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* (zero + 1);
return 0;
}