HDU4726
来源:互联网 发布:笑笑淘宝店 编辑:程序博客网 时间:2024/06/06 00:39
思路:
1.用大小为10的数组保存a b的每位数字个数
2.先构造出第一位,再构造出其他位.因为第一位不能为0,所以要判断当前能够成的最大的数字 其中之一不能够是0
3.存在a=11 b=99之类的情况,和是00 多个0 ,转化成一个0
/*Code By Aquariuslt*//*HDU 4726 Kia's Calculation*/#include<iostream>#include<stdio.h>#include<string>#include<algorithm>#include<string.h>#include<set>#include<vector>#include<queue>#include<stack>#include<limits.h>#include<math.h>#define FOR(i,a,b) for(int i=(a);i<(b);i++)#define FORD(i,a,b) for(int i=(a);i<=(b);i++)#define REP(i,b) FOR(i,0,b)#define CLR(a) memset(a,0,sizeof(a))using namespace std;#define maxn 1000050char a[maxn],b[maxn];int sa[10],sb[10];char op[maxn];int main() { int t; scanf("%d",&t); REP(ti,t) { scanf("%s",a); scanf("%s",b); CLR(sa); CLR(sb); int lena=strlen(a),lenb=strlen(b); REP(i,lena) { sa[a[i]-'0']++; } REP(i,lenb) { sb[b[i]-'0']++; } /*makefirst*/ int flag=0; for(int sum=9; sum>=1; sum--) { if(flag==1)break; REP(i,10) { if(flag==1)break; REP(j,10) { if(flag==1)break; if(sa[i]>0&&sb[j]>0&&(i+j)%10==sum&&i!=0&&j!=0) { sa[i]--; sb[j]--; flag=1; op[0]='0'+(i+j)%10; } } } } if(flag==0)printf("Case #%d: 0\n",ti+1); /*make other*/ else { int opnow=1; for(int sum=9; sum>=0; sum--) { REP(i,10) { REP(j,10) { while(sa[i]>0&&sb[j]>0&&(i+j)%10==sum) { sa[i]--; sb[j]--; op[opnow++]='0'+(i+j)%10; //printf("%d %d\n",i,j); } } } } /*make other solution 2*/ /*while(opnow<lena){ int maxnow=0; int maxi,maxj; REP(i,10){ REP(j,10){ if((i+j)%10>=maxnow&&sa[i]>0&&sb[j]>0){ maxi=i; maxj=j; maxnow=(i+j)%10; } } } op[opnow++]='0'+maxnow; sa[maxi]--; sb[maxj]--; }*/ op[opnow]='\0'; printf("Case #%d: %s\n",ti+1,op); } } return 0;}
- HDU4726
- HDU4726
- HDU4726
- hdu4726贪心
- HDU4726-Kia's Calculation
- hdu4726--(Kia's Calculation)
- hdu4726 Kia's Calculation 贪心
- swf破解扫盲教程-内存抓取法破解swf加壳
- 社会化分享 SDK
- 证明辗转相除法
- ANSI C(标准C)究竟有多少个头文件?
- Oracle常用sql语句初体验select成功=努力+方法。
- HDU4726
- Android Jelly Bean滑动解锁控件实现
- Linux链接脚本资料
- 盛年不重来、一日难再晨
- 啊啊啊
- 最近在用表格呈现数据时遇到的问题
- 百钱百鸡
- 2014华为机试试题1——反转相加(2013.09.11)
- HDU-2993 二分-至少连续k个平均值最大(数形结合)