Pagini recente » simulare_lot_seniori_1 | Cod sursa (job #597987) | Cod sursa (job #1101469) | Cod sursa (job #1814076) | Cod sursa (job #962685)
Cod sursa(job #962685)
#include<stdio.h>
#include<algorithm>
#define alfa 10
#define maxcif 1005
using namespace std;
FILE*f=fopen("prod.in","r");
FILE*g=fopen("prod.out","w");
int fr[alfa],N[2][maxcif],sol[maxcif<<1];
inline int get_min ( int *A , int *B ){
if ( A[0] < B[0] ) return 0;
if ( A[0] > B[0] ) return 1;
for ( int i = 1 ; i <= A[0] ; ++i ){
if ( A[i] < B[i] ) return 0;
if ( A[i] > B[i] ) return 1;
}
return 0;
}
inline void mult ( int *A , int *B , int *C ){
C[0] = A[0]+B[0]-1;
for ( int i = 1 ; i <= A[0] ; ++i ){
for ( int j = 1 ; j <= B[0] ; ++j ){
C[i+j-1] += A[i]*B[j];
}
}
int T = 0;
for ( int i = 1 ; i <= C[0] ; ++i ){
C[i] += T;
T = C[i]/10;
C[i] %= 10;
}
if ( T ) C[++C[0]] = T;
}
int main () {
for ( int i = 1 ; i < alfa ; ++i ){
fscanf(f,"%d",&fr[i]);
}
for ( int i = alfa-1 ; i >= 1 ; --i ){
for ( int j = 1 ; j <= fr[i] ; ++j ){
int where = get_min(N[0],N[1]);
N[where][++N[where][0]] = i;
}
}
reverse(N[0]+1,N[0]+N[0][0]+1);
reverse(N[1]+1,N[1]+N[1][0]+1);
mult(N[0],N[1],sol);
for ( int i = sol[0] ; i >= 1 ; --i ){
fprintf(g,"%d",sol[i]);
}
fprintf(g,"\n");
fclose(f);
fclose(g);
return 0;
}