hdu 4726 Kia's Calculation(贪心,好题)
来源:互联网 发布:网络推广的书籍 编辑:程序博客网 时间:2024/04/20 11:18
题目链接
Kia's Calculation
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3283 Accepted Submission(s): 702
Problem Description
Doctor Ghee is teaching Kia how to calculate the sum of two integers. But Kia is so careless and alway forget to carry a number when the sum of two digits exceeds 9. For example, when she calculates 4567+5789, she will get 9246, and for 1234+9876, she will get 0. Ghee is angry about this, and makes a hard problem for her to solve:
Now Kia has two integers A and B, she can shuffle the digits in each number as she like, but leading zeros are not allowed. That is to say, for A = 11024, she can rearrange the number as 10124, or 41102, or many other, but 02411 is not allowed.
After she shuffles A and B, she will add them together, in her own way. And what will be the maximum possible sum of A "+" B ?
Now Kia has two integers A and B, she can shuffle the digits in each number as she like, but leading zeros are not allowed. That is to say, for A = 11024, she can rearrange the number as 10124, or 41102, or many other, but 02411 is not allowed.
After she shuffles A and B, she will add them together, in her own way. And what will be the maximum possible sum of A "+" B ?
Input
The rst line has a number T (T <= 25) , indicating the number of test cases.
For each test case there are two lines. First line has the number A, and the second line has the number B.
Both A and B will have same number of digits, which is no larger than 106, and without leading zeros.
For each test case there are two lines. First line has the number A, and the second line has the number B.
Both A and B will have same number of digits, which is no larger than 106, and without leading zeros.
Output
For test case X, output "Case #X: " first, then output the maximum possible sum without leading zeros.
Sample Input
159583036
Sample Output
Case #1: 8984
Source
2013 ACM/ICPC Asia Regional Online —— Warmup2
一道很好的贪心题,不过处处是坑,先确定最高位,不能有前导0,然后依次确定后面的位,做法详见代码。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<vector>using namespace std;const int MAXN=2*1e6+100;char s1[MAXN],s2[MAXN];int ans[MAXN];int cnt1[20],cnt2[20];int main(){int cas;scanf("%d",&cas);for(int k=1;k<=cas;k++){memset(cnt1,0,sizeof(cnt1));memset(cnt2,0,sizeof(cnt2));memset(ans,0,sizeof(ans));scanf("%s%s",s1,s2);int len=strlen(s1);if(len==1){int a=s1[0]-'0',b=s2[0]-'0';printf("Case #%d: %d\n",k,(a+b)%10);continue;}for(int i=0;i<len;i++) cnt1[s1[i]-'0']++,cnt2[s2[i]-'0']++;int p=0,q=0,tt=-1;for(int i=1;i<=9;i++) for(int j=1;j<=9;j++) if(cnt1[i]&&cnt2[j]) { if((i+j)%10>tt) tt=(i+j)%10,p=i,q=j; }ans[1]=tt;int tot=1;cnt1[p]--,cnt2[q]--;for(int l=9;l>=0;l--){for(int i=0;i<=9;i++){if(!cnt1[i]) continue;int p;if(i<=l)p=l-i;else p=l-i+10;int q=min(cnt1[i],cnt2[p]);cnt1[i]-=q;cnt2[p]-=q;while(q--) ans[++tot]=l;}}printf("Case #%d: ",k);int s=1;while(s<tot&&ans[s]==0) s++;//注意不是小于等于tot,因为最终结果必须要输出一个数,比如90+10. for(int i=s;i<=len;i++) printf("%d",ans[i]);printf("\n");}return 0;}
0 0
- hdu 4726 Kia's Calculation(贪心,好题)
- HDU 4726 Kia's Calculation (贪心)
- hdu 4726 Kia's Calculation(贪心)
- hdu 4726 Kia's Calculation (贪心)
- HDU 4726 Kia's Calculation
- HDU 4726 Kia's Calculation
- hdu 4726 Kia's Calculation
- HDU 4726 Kia's Calculation
- HDU 4726 Kia's Calculation
- HDU 4726 Kia's Calculation
- HDU 4726 Kia's Calculation
- HDU 4726 Kia's Calculation
- HDU 4726 Kia's Calculation
- HDU 4726 Kia's Calculation
- HDU 4726 Kia's Calculation(数学+贪心)
- HDU 4726 Kia's Calculation (贪心算法)
- HDU 4726 Kia's Calculation 解题报告
- Kia's Calculation(贪心)
- 【ITOO-视频系统】——进度条
- 第四周项目四圆柱表面积
- android系统的结构
- 最简单的VideoView视频播放器
- mysql5.7安装记录
- hdu 4726 Kia's Calculation(贪心,好题)
- Linux内核裁剪过程
- caffe在画accuracy曲线图及对某文件夹下多张图片预测分类时的问题解决
- 我的程序
- Mongodb学习总结(1)——常用NoSql数据库比较
- 分布式与集群的区别
- Android开发之App Widget(三)
- java加载jar包和自定义class文件加载
- 项目解决问题记录