Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 624 Accepted Submission(s): 178
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<algorithm> 6 #define maxn 1000000 //1e6 7 using namespace std; 8 char a[maxn+5],b[maxn+5],c[maxn+5]; 9 void cal(int *str,char *a,int len) 10 { 11 for(int i=0;i<len;i++) 12 { 13 str[a[i]-'0']++; 14 } 15 } 16 int main() 17 { 18 int t,i,j,count=1,max,posi,posj,len1,k; 19 //freopen("test.in","r",stdin); 20 //freopen("test.out","w",stdout); 21 scanf("%d",&t); 22 while(t--) 23 { 24 int A[10]={0},B[10]={0},flag=0; 25 memset(a,'\0',sizeof a); 26 memset(b,'\0',sizeof b); 27 memset(c,'\0',sizeof c); 28 scanf("%s%s",a,b); 29 len1=strlen(a); 30 cal(A,a,len1); 31 cal(B,b,len1); 32 printf("Case #%d: ",count++); 33 for(k=1;k<=len1;k++) 34 { 35 max=-1; 36 for(i=9;i>=0;i--) 37 { 38 if(k==1&&i==0&&len1!=1) continue; 39 if(A[i]) 40 { 41 for(j=9;j>=0;j--) 42 { 43 if(k==1&&j==0&&len1!=1) continue; 44 if(B[j]) 45 { 46 int temp=(i+j)%10; 47 if(max<temp) 48 { 49 max=temp; 50 posi=i; 51 posj=j; 52 } 53 } 54 if(max==9)break; 55 } 56 } 57 if(max==9)break; 58 } 59 A[posi]--; 60 B[posj]--; 61 c[flag++]=max+'0'; 62 } 63 if(flag>1) 64 { 65 if(c[0]>'0') 66 printf("%c",c[0]); 67 for(i=1;i<flag;i++) 68 { 69 printf("%c",c[i]); 70 if(c[0]<='0'&&c[i]=='0') break; 71 } 72 puts(""); 73 } 74 else 75 printf("%c\n",c[0]); 76 } 77 return 0; 78 }