Pagini recente » Cod sursa (job #2905103) | Cod sursa (job #485303) | Cod sursa (job #2422276) | Borderou de evaluare (job #111567) | Cod sursa (job #467423)
Cod sursa(job #467423)
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <string.h>
#define MAX 2048
#define bazaNum 10
#define ll long long
#define pb push_back
using namespace std;
int cant[16];
int x[MAX], y[MAX];
vector <int> vctEl;
inline void inmulteste(int *nrmProd, int nrmFact[])
{
int t = 0;
int nrmTemp[MAX];
memset(nrmTemp, 0, sizeof(nrmTemp));
for (int i = 1; i <= nrmProd[0]; i++)
for (int j = 1; j <= nrmFact[0] || t; j++, t /= bazaNum)
{
nrmTemp[i + j - 1] = (t += nrmTemp[i + j - 1] + nrmProd[i] * nrmFact[j]) % bazaNum;
if (i + j - 1 > nrmTemp[0])
nrmTemp[0] = i + j - 1;
}
for (int i = 0; i <= nrmTemp[0]; i++)
nrmProd[i] = nrmTemp[i];
}
int main()
{
freopen("prod.in", "r", stdin);
freopen("prod.out", "w", stdout);
for (int i = 1; i < 10; i++)
scanf("%d", &cant[i]);
int dp = 0;
for (int i = 9; i; i--)
for (int j = 1; j <= cant[i]; j++)
vctEl.pb(i);
for (int i = 0; i < vctEl.size(); i++)
if (dp)
{
y[++y[0]] = vctEl[i];
i++;
if (i < vctEl.size())
x[++x[0]] = vctEl[i];
}
else
{
x[++x[0]] = vctEl[i];
i++;
if (i < vctEl.size())
{
if (vctEl[i] != vctEl[i - 1])
dp++;
y[++y[0]] = vctEl[i];
}
}
reverse(x + 1, x + 1 + x[0]);
reverse(y + 1, y + 1 + y[0]);
inmulteste(x, y);
for (int i = x[0]; i; i--)
printf("%d", x[i]);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}