55 lines
3.4 KiB
C
55 lines
3.4 KiB
C
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
typedef struct
|
||
|
N{ int n,l;}N;typedef
|
||
|
#define R(n,L) n->l=L,n->a\
|
||
|
=realloc(n->a,n->l* sizeof(N))
|
||
|
struct H{N*a;int l;}H ;int S
|
||
|
(H*n) {int i,j,r;for(i =0;i<n->
|
||
|
l;i ++)if(n->a[i].n>9){r=n->a[
|
||
|
i].n; n->a[i].n/=2;R(n,n->l+1);for
|
||
|
(j=n->l-1;j>i;j--)n->a[j]=n->a[j-1]; n->a[i+1].n=r-n->
|
||
|
a[ i ].n;n->a[i].l++;n->a[i+1].l++; return 1;}return 0;}void I(
|
||
|
char*s,H * n ){int l=0;for(;*s;s ++)if(*s>90)l+= 92- *s; else if(
|
||
|
*s>44){R(n,n->l+1);n-> a[n->l-1].n=*s- 48; n ->a [n->l -1 ]. l=l;}
|
||
|
}N*M(N*n,int l,int*o){int q,w=0,e=0; if(n ->l ==l)
|
||
|
q=n++->n;else{ n = M ( M(n,l+ 1,&w),l+1,&e);q= 3*w+2*e ;} *o+=q ;
|
||
|
return n ; } void C ( H * n ,H*r){R(n,r->l); memcpy(n->a ,r -> a,n-> l*
|
||
|
sizeof( N ) ) ; }void A(H*n,H*r){int i,o=n-> l;R(n,n ->l+r ->l );
|
||
|
memcpy( n ->a +o ,r -> a,r->l*sizeof(N)); for(i=0 ;i<n->l ;i ++)n ->a [i ]. l ++;
|
||
|
do{int i , j ; for(i=0;i<n->l ;)if(n->a[i].l>=5){if(i )n-> a[i-1 ].n+= n ->a
|
||
|
[ i ] . n ; if(i+2<n->l)n->a[i+2].n+=n->a[ i+1 ] .n ; n
|
||
|
-> a[ i+ 1] .n =0 ;n -> a[ i +1].l--;for(j=i;j<n->l-1;j ++)n-> a[
|
||
|
j ]= n ->a [j +1 ]; n ->l -- ;}else{i++;}}while(S(n));}
|
||
|
int main(){char*a;H*h=NULL,r={0};
|
||
|
int k= 0, i, j ,S =0,G=0,g;for
|
||
|
(; scanf("%ms\n"
|
||
|
,&a)==1;k
|
||
|
++) { h=
|
||
|
realloc(h
|
||
|
,( k+1)*
|
||
|
sizeof(H)
|
||
|
);memset(&h
|
||
|
[k ] , 0 ,
|
||
|
sizeof(H));
|
||
|
I(a,&h[k]);
|
||
|
free(a);}
|
||
|
for(i=0;i<k
|
||
|
;i++)if(i)A
|
||
|
(&r,&h[i]);
|
||
|
else C(&
|
||
|
r,& h[i]);M
|
||
|
(&r.a [0],0,
|
||
|
&S) ; for(i=0;i<
|
||
|
k;i++){for(j=0;j<k ; j
|
||
|
++){g=0;C(& r,&h[i ] );A(&r,&h[j]
|
||
|
);M (& r. a[0],0,&g ); G=g>G?g:
|
||
|
G;}}printf("Silve" """r: %"
|
||
|
"""d\n""" "" "Gold:"
|
||
|
" %d"
|
||
|
"\n",S
|
||
|
,G)
|
||
|
;}
|