Pagini recente » Cod sursa (job #599764) | Istoria paginii runda/12344321 | Cod sursa (job #2838861) | Cod sursa (job #2103455) | Cod sursa (job #466712)
Cod sursa(job #466712)
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<deque>
#define dechiu deque
using namespace std;
const int N=2000;
dechiu <int> q;
int nr[2][N],C[N];
void mul(int A[], int B[])
{
int i, j, t;
memset(C, 0, sizeof(C));
for (i = 1; i <= A[0]; i++)
{
for (t=0, j=1; j <= B[0] || t; j++, t/=10)
C[i+j-1]=(t+=C[i+j-1]+A[i]*B[j])%10;
if (i + j - 2 > C[0]) C[0] = i + j - 2;
}
memcpy(A, C, sizeof(C));
}
void Read(){
int x;
for( int i=1; i<=9; ++i){
scanf("%d",&x);
while(x--)
q.push_front(i);
}
}
void Solve(){
int prior=0, up, down, a, b;
while(!q.empty()){
up=prior%2;
down=up^1;
a=q.front();
q.pop_front();
nr[up][++nr[up][0]]=a;
if(!q.empty()){
b=q.front();
q.pop_front();
nr[down][++nr[down][0]]=b;
}
if(a!=b)
prior++;
}
}
void Print(){
for( int i=nr[0][0]; i; --i)
printf("%d",nr[0][i]);
}
void SwapNums(){
int aux,nnn=nr[0][0];
for( int i=1; i<=nnn/2; ++i){
aux=nr[0][i];
nr[0][i]=nr[0][nnn-i+1];
nr[0][nnn-i+1]=aux;
}
nnn=nr[1][0];
for( int i=1; i<=nnn/2; ++i){
aux=nr[1][i];
nr[1][i]=nr[1][nnn-i+1];
nr[1][nnn-i+1]=aux;
}
}
int main()
{
freopen("prod.in","r",stdin);
freopen("prod.out","w",stdout);
Read();
Solve();
SwapNums();
mul(nr[0],nr[1]);
Print();
return 0;
}