#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=1e6+10;
char a[maxn],b[maxn];
int c[11],d[11];
int first()
{
int i,j,k;
for(i=9;i>=1;i--)
{
for(j=1;j<=9;j++)
{
if(i-j>0&&c[j]&&d[i-j])
{
c[j]--;
d[i-j]--;
break;
}
if(10+i-j<=9&&c[j]&&d[10+i-j])
{
c[j]--;
d[10+i-j]--;
break;
}
}
if(j<=9)break;
}
return i;
}
int find(int x)
{
int i,j,k,ans=0,t;
for(i=0;i<=9;i++)
{
if(x-i>=0&&c[i]&&d[x-i])
{
t=min(c[i],d[x-i]);
c[i]-=t;
d[x-i]-=t;
ans+=t;
}
if(10+x-i<=9&&c[i]&&d[10+x-i])
{
t=min(c[i],d[10+x-i]);
c[i]-=t;
d[10+x-i]-=t;
ans+=t;
}
}
return ans;
}
int main()
{
int T,tt=0;
scanf("%d",&T);
while(T--)
{
int i,j,k,n,m;
scanf("%s%s",a,b);
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
n=strlen(a);
for(i=0;i<n;i++)
{
c[a[i]-'0']++;
d[b[i]-'0']++;
}
int t=first();
printf("Case #%d: %d",++tt,t);
if(t==0){printf("\n");continue;}//第一个位置是0,则说明其余位置都将是0
for(i=9;i>=0;i--)//先找可以匹配出大的数。
{
m=find(i);
for(j=0;j<m;j++)
printf("%d",i);
}
printf("\n");
}
return 0;
}
hdu 4726 Kia's Calculation 数论(2013 ACM/ICPC Asia Regional Online —— Warmup2 1011)
最新推荐文章于 2015-10-02 21:33:21 发布