HDU4726Kia's Calculation 贪心

来源:互联网 发布:vs mysql 编辑:程序博客网 时间:2024/06/16 05:01
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int maxn=1000010;char a[maxn],b[maxn];int hash1[15],hash2[15];int main(){int i,j,m,n,k;int t,cas=0;scanf("%d",&t);while(t--){scanf("%s%s",a,b);memset(hash1,0,sizeof(hash1));memset(hash2,0,sizeof(hash2));//printf("%s %s\n",a,b);int sb=strlen(a);for(i=0;i<sb;i++){hash1[a[i]-'0']++;hash2[b[i]-'0']++;}printf("Case #%d: ",++cas);int flag=0,ok,num;for(i=9;i>=0;i--)//分开判断第一位{for(j=1;j<=9;j++){ok=(i-j+10)%10;if(hash1[j]&& hash2[ok]&& ok!=0) {        if(i!=0)//和不能有前导0,比如9090和1010,那么最高位只能是0{   printf("%d",i);       flag=1;}    hash1[j]--;    hash2[ok]--;    break;}}if(j<=8) break;}for(i=9;i>=0;i--){if(i==0&&flag==0) continue;//flag==0说明前面第一位有前导0,且下面flag没变,即没输出for(j=0;j<=9;j++){  ok=(i-j+10)%10;if(hash1[j]!=0 && hash2[ok]!=0){num=hash1[j]>hash2[ok]?hash2[ok]:hash1[j];hash1[j]-=num;hash2[ok]-=num;for(k=0;k<num;k++)printf("%d",i); flag=1;}}}if(flag==0) printf("0"); //处理输入0 0的情况 printf("\n");}return 0;}