Pagini recente » Cod sursa (job #1984789) | Cod sursa (job #2800514) | Cod sursa (job #2743614) | Istoria paginii descriere/ordonare/de-la-nave | Cod sursa (job #471256)
Cod sursa(job #471256)
#include <cstdio>
#include <cstring>
#define MAXN 1024
using namespace std;
int ncif[10];
int fn[MAXN],sn[MAXN],Lf,Ls;
int cifre[MAXN];
int final[MAXN*3];
void reverse_vec(int* v){
for (int i=1;i<=(v[0]/2);++i){
int aux=v[i];
v[i]=v[v[0]-i+1];
v[v[0]-i+1]=aux;
}
}
void add_vec(int *v,int depla,int K){
for (int i=1;i<=v[0];++i)
final[i+depla]+=K*v[i];
}
void do_prod(){
memset(final,0,sizeof(final));
for (int i=1;i<=sn[0];++i)
add_vec(fn,i-1,sn[i]);
final[0]=sn[0]+fn[0]-1;
int t=0;
for (int i=1;i<=final[0];++i){
int x=final[i]+t;
final[i]=x%10;
t=x/10;
}
while (t){
final[++final[0]]=t%10;
t/=10;
}
}
int main(){
freopen("prod.in","r",stdin);
freopen("prod.out","w",stdout);
for (int i=1;i<=9;++i) scanf("%d",&ncif[i]);
fclose(stdin);
int greater=0;
int tcif=0;
for (int i=9;i>=1;--i)
for (int j=1;j<=ncif[i];++j)
cifre[++tcif]=i;
int ind=1;
cifre[tcif+1]=0;
Lf=Ls=0;
while (ind<=tcif){
int c1=cifre[ind];
int c2=cifre[ind+1];
ind+=2;
if (c1>c2){
if (greater==0){
fn[++Lf]=c1;
greater=1;
if (c2!=0) sn[++Ls]=c2;
greater=1;
} else {
sn[++Ls]=c1;
if (c2!=0) fn[++Lf]=c1;
}
} else {
fn[++Lf]=c1;
sn[++Ls]=c2;
}
}
fn[0]=Lf;
sn[0]=Ls;
reverse_vec(fn);
reverse_vec(sn);
do_prod();
for (int i=final[0];i>=1;--i)
printf("%d",final[i]);
printf("\n");
fclose(stdout);
return 0;
}