首页 > 代码库 > HDU 4726 贪心
HDU 4726 贪心
2013 ACM/ICPC Asia Regional Online —— Warmup2
贪心
给出两个位数一样的数,位数<=10^6;
数字的每一位都能移动, 但移动后的整数一定要是合法的, 即无前导零。 使得 A + B 最大
特殊加法: 8+2=0; 8+3=1;
贪心从9开始取,第一位不能为0;
#include "stdio.h" #include "string.h" char stra[1000100],strb[1000100]; int Min(int a,int b) { if (a<b) return a;else return b; } int main() { int Case,i,j,key,k,num,ii; int a[11],b[11]; scanf("%d",&Case); for (ii=1;ii<=Case;ii++) { scanf("%s%s",stra,strb); printf("Case #%d: ",ii); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for (i=0;stra[i];i++) a[stra[i]-'0']++; for (i=0;strb[i];i++) b[strb[i]-'0']++; key=0; for (i=9;i>=1;i--) { for (j=1;j<=9;j++) { k=(i-j+10)%10; if (k==0) continue; if (a[j]==0 || b[k]==0) continue; a[j]--; b[k]--; key=1; printf("%d",i); break; } if (key==1) break; } if (key==0) { printf("0\n"); continue; } for (i=9;i>=0;i--) { for (j=0;j<=9;j++) { k=(i-j+10)%10; if (a[j]==0 || b[k]==0) continue; num=Min(a[j],b[k]); a[j]-=num; b[k]-=num; while (num) {printf("%d",i);num--;} } } printf("\n"); } return 0; }
HDU 4726 贪心
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。