#include<iostream>
#include<cstdio>
#include<list>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
#include<memory.h>
#define ll long long
#define LL __int64
using namespace std;
vector<int>G[100002];
int a[12];
int b[12];
char temp[1000502];
char s1[1000502],s2[1000502];
void clear()
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));/*
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));*/
memset(temp,0,sizeof(temp));
}
int main()
{
int t,Case=0;
cin>>t;
while(t--)
{
scanf("%s",s1);
scanf("%s",s2);
int len=strlen(s1);
if(len==1)
{
printf("Case #%d: %d\n",++Case,(s1[0]-'0'+s2[0]-'0')%10);
continue;
}
clear();
for(int i=0;i<len;i++)
{
a[s1[i]-'0']++;
b[s2[i]-'0']++;
}
int maxn=-1;
int mark1,mark2;
for(int i=9;i>0;i--)//前导0违法,所以第一位拿出来判断
{
if(a[i])
{
for(int j=1;j<=9;j++)
{
if(b[j])
{
if(((i+j)%10)>maxn)
{
maxn=(i+j)%10;
mark1=i;
mark2=j;
}
}
}
}
}
if(maxn==0)
{
printf("Case #%d: 0\n",++Case);
continue;
}
a[mark1]--;
b[mark2]--;
temp[0]=maxn+'0';
int cnt=1;
for(int k=1;k<len;k++)//剩下的直接用贪心来处理好了
{
maxn=-1;
for(int i=9;i>=0;i--)
{
if(a[i])
{
for(int j=0;j<=9;j++)
{
if(b[j])
{
if(maxn<((i+j)%10))
{
maxn=(i+j)%10;
mark1=i;
mark2=j;
}
}
}
}
}
temp[k]=maxn+'0';
a[mark1]--;
b[mark2]--;
}
printf("Case #%d: %s",++Case,temp);//输出还得用字符串不然超时,我自己坑自己了,
cout<<endl;
}
return 0;
}
HDU4726
最新推荐文章于 2017-12-16 17:19:15 发布