Cod sursa(job #2399202)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 7 aprilie 2019 09:45:33
Problema Prod Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>
using namespace std;

const int DIM = 2000;

int nr1[DIM], nr2[DIM], aux[DIM], cnt[10];

int cmp(int a[], int b[]) {
	for (int i = 0; i <= a[0]; ++i) {
		if (a[i] != b[i]) {
			return a[i] < b[i] ? -1 : 1; } }
	return 0; }

void mul(int a[], int b[]) {
	int i, j, t;
	for (i = 1; i <= a[0]; ++i) {
		for (j = 1, t = 0; j <= b[0] or t; ++j, t /= 10) {
			aux[i + j - 1] = (t += aux[i + j - 1] + a[i] * b[j]) % 10; }
		aux[0] = max(aux[0], i + j - 2); }
	for (int i = 0; i <= aux[0]; ++i) {
		a[i] = aux[i]; } }

int main(void) {
	freopen("prod.in", "r", stdin);
	freopen("prod.out", "w", stdout);
	for (int i = 1; i <= 9; ++i) {
		cin >> cnt[i]; }
	for (int i = 9; i >= 1; --i) {
		while (cnt[i]--) {
			if (cmp(nr1, nr2) <= 0) {
				nr1[++nr1[0]] = i; }
			else {
				nr2[++nr2[0]] = i; } } }
	reverse(nr1 + 1, nr1 + nr1[0] + 1);
	reverse(nr2 + 1, nr2 + nr2[0] + 1);
	mul(nr1, nr2);
	for (int i = nr1[0]; i >= 1; --i) {
		cout << nr1[i]; }
	return 0; }