HDU 4726 Kia's Calculation

来源:互联网 发布:网络情缘一线牵林更新 编辑:程序博客网 时间:2024/04/28 02:55

Doctor Ghee is teaching Kia how to calculate the sum of two integers. But Kia is so careless and alway forget to carry a number when the sum of two digits exceeds 9. For example, when she calculates 4567+5789, she will get 9246, and for 1234+9876, she will get 0. Ghee is angry about this, and makes a hard problem for her to solve: 
Now Kia has two integers A and B, she can shuffle the digits in each number as she like, but leading zeros are not allowed. That is to say, for A = 11024, she can rearrange the number as 10124, or 41102, or many other, but 02411 is not allowed. 
After she shuffles A and B, she will add them together, in her own way. And what will be the maximum possible sum of A "+" B ?
 

Input

The rst line has a number T (T <= 25) , indicating the number of test cases. 
For each test case there are two lines. First line has the number A, and the second line has the number B. 
Both A and B will have same number of digits, which is no larger than 10 6, and without leading zeros.
 

Output

For test case X, output "Case #X: " first, then output the maximum possible sum without leading zeros.
 

Sample Input

159583036
 

Sample Output

Case #1: 8984

随机组合 用不进制来求出最大值


#include <stdio.h>#include <algorithm>#include <string.h>using namespace std;char a[1000005],b[1000005];int aa[15],bb[15],ans[1000005];int main(){    int cas,l,k,j,i,v,temp1,temp2,o,temp3;    scanf("%d",&cas);    for(int tt=1;tt<=cas;tt++)    {        scanf("%s %s",a,b);        if(!strcmp(a,"0"))            {printf("Case #%d: ",tt);puts(b);continue;}        if(!strcmp(b,"0"))            {printf("Case #%d: ",tt);puts(a);continue;}        l=strlen(a);        memset(aa,0,sizeof aa);        memset(bb,0,sizeof bb);        for(i=0; i<l; i++)        {            aa[a[i]-'0']++;            bb[b[i]-'0']++;        }        v=0;        int maxx=-1;        for(j=1; j<10; j++)        {            for(k=1; k<10; k++)            {                if(aa[j]&&bb[k])                {                    if((j+k)%10>maxx)                    {                        temp1=j;                        temp2=k;                        maxx=(j+k)%10;                    }                }            }        }        ans[v++]=maxx;        aa[temp1]--;        bb[temp2]--;        if(maxx==0)        {            printf("Case #%d: ",tt);puts("0");continue;        }        for(k=9; k>=0; k--)            for(o=0; o<10; o++)            {                for(i=0; i<10; i++)                {                    if((o+i)%10==k)                    {                        while(aa[o]&&bb[i])                        {                            aa[o]--;                            bb[i]--;                            ans[v++]=k;                          //  printf("%d %d %d\n",o,i,k);                        }                    }                }            }        printf("Case #%d: ",tt);        for(i=0;i<v;i++)            printf("%d",ans[i]);        printf("\n");    }    return 0;}

 



0 0
原创粉丝点击