Cod sursa(job #714957)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 16 martie 2012 13:13:03
Problema Prod Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb

#include <cstdio>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> a[2],sol;
int nr[10];

void read ()
{
	ifstream in ("prod.in");
	for(int i=1;i<10;++i)
		in>>nr[i];
}

int cmp ()
{
	if(a[0].size()<a[1].size())
		return 0;
	if(a[0].size()>a[1].size())
		return 1;
	for(size_t i=0;i<a[0].size();++i)
	{
		if(a[0][i]<a[1][i])
			return 0;
		if(a[0][i]>a[1][i])
			return 1;
	}
	return 0;
}

void prd ()
{
	sol.resize(a[0].size()+a[1].size());
	for(size_t i=0;i<a[0].size();++i)
		for(int j=0,t=0;j<=(int)a[1].size()||t;++j,t/=10)
			sol[i+j]=(t+=(sol[i+j]+a[0][i]*a[1][j]))%10;
}

void solve ()
{
	for(int i=9;i>0;--i)
		for(;nr[i];--nr[i])
		{
			int ind=cmp();
			a[ind].push_back(i);
		}
	reverse(a[0].begin(),a[0].end());
	reverse(a[1].begin(),a[1].end());
	prd();
	reverse(sol.begin(),sol.end());
}

void out ()
{
	freopen ("prod.out","w",stdout);
	for(vector<int>::iterator i=sol.begin();i<sol.end();++i)
		printf("%d",*i);
}

int main ()
{
	read ();
	solve ();
	out ();
	return 0;
}