Cod sursa(job #729232)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 29 martie 2012 13:22:32
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#include <cstring>
#include <algorithm>
#define NMAx 2012
using namespace std;

int V[2][NMAx],Nr[2],P[10],Sol[NMAx];

bool Cmp() {
	
	if(Nr[0]<Nr[1]) return 0;
	if(Nr[1]>Nr[0]) return 1;
	
	for(int i=1;i<=Nr[0];i++) {
		if(V[0][i]<V[1][i]) return 0;
		if(V[0][i]>V[1][i]) return 1;
		}
	
	return 0;
	
}
void Solve() {
	
	int i,j,k;
	
	for(i=9;i>0;i--) {
		
		while(P[i]--) {
			k=Cmp();
			V[k][++Nr[k]]=i;
			}
		
		}
	
	reverse(V[0]+1,V[0]+Nr[0]+1);
	reverse(V[1]+1,V[1]+Nr[1]+1);
	
	for(i=1;i<=Nr[0];i++)
		for(j=1;j<=Nr[1];j++) {
			
			Sol[i+j-1]+=V[0][i]*V[1][j];
			k=i+j-1;
			while(Sol[k]>9) {
				Sol[k+1]+=Sol[k]/10;
				Sol[k]%=10;
				k++;
				}
			}

}
void Citire() {
	
	ifstream in("prod.in");
	
	for(int i=1;i<10;i++)
		in>>P[i];
	
	in.close();
	
}
void Afis() {
	
	int i,L;
	ofstream out("prod.out");
	
	L=Nr[0]+Nr[1]-1;
	while(Sol[L]) L++;
	
	for(i=L-1;i>=1;i--)
		out<<Sol[i];
	out<<'\n';
	
	out.close();
	
}
int main() {
	
	Citire();
	Solve();
	Afis();
	
	return 0;
	
}