Pagini recente » Cod sursa (job #789161) | Cod sursa (job #2311187) | Cod sursa (job #356125) | Cod sursa (job #2819290) | Cod sursa (job #479679)
Cod sursa(job #479679)
#include <cstdio>
#include <algorithm>
const int maxN = 2010;
using namespace std;
int N, V[maxN];
int s1[maxN], s2[maxN], val1, val2, nr1, nr2;
int rez[maxN];
inline int getShit(int sum) {
return s1[1] * s2[sum - 1] + s2[1] * s1[sum - 1];
}
inline void mult(int A[], int B[], int C[]) {
int i, j;
C[0] = A[0] + B[0] - 1;
for (i = 1; i <= A[0]; i++)
for (j = 1; j <= B[0]; j++)
C[i + j - 1] += A[i] * B[j];
for (i = 1; i <= C[0]; i++) {
C[i + 1] += C[i] / 10;
C[i] %= 10;
}
if (C[C[0] + 1] > 0) C[0]++;
while (C[C[0]] > 9) {
C[C[0] + 1] = C[C[0]] / 10;
C[C[0]] %= 10;
C[0]++;
}
}
int main() {
int i, j, nr;
freopen("prod.in", "r", stdin);
freopen("prod.out", "w", stdout);
for (i = 1; i <= 9; i++) {
scanf("%d", &nr);
for (j = 1; j <= nr; j++)
V[++N] = i;
}
for (i = 1; i <= N / 2; i++)
swap(V[i], V[N - i + 1]);
for (i = 1; i <= N / 2; i++) {
s1[i] = V[2 * i - 1];
s2[i] = V[2 * i];
val1 = getShit(i + 1);
swap(s1[i], s2[i]);
val2 = getShit(i + 1);
if (val1 > val2)
swap(s1[i], s2[i]);
}
nr1 = nr2 = N / 2;
if (N % 2 == 1) {
i = 1;
while (s1[i] == s2[i] && i <= N / 2)
i++;
if (s1[i] < s2[i])
s1[++nr1] = V[N];
else
s2[++nr2] = V[N];
}
for (i = 1; i <= nr1 / 2; i++)
swap(s1[i], s1[nr1 - i + 1]);
for (i = 1; i <= nr2 / 2; i++)
swap(s2[i], s2[nr2 - i + 1]);
s1[0] = nr1; s2[0] = nr2;
mult(s1, s2, rez);
for (i = rez[0]; i > 0; i--)
printf("%d", rez[i]);
return 0;
}