pid=4726">http://acm.hdu.edu.cn/showproblem.php?

pid=4726

大致题意:给两个长度小于10^6且相等的合法的正整数。你能够随意组合每一个数中的数字,但不能有前导零。两个数相加的规则如题,相加不进位。

问能够得到的A+B的最大值。



都看错题意了,一直以为数的大小是小于10^6,队友用了一个ms非常高端的函数对字符串全排列,枚举求最大值。结果WA到死。事实上是长度小于10^6,以后看题要细心再细心啊。

。。

用数组记录每一个数中每一个数字的个数。每次都找从两个字符串中找和最大的,但求第一个数时要注意,不能有前导零。除了第一位,后面的每次找和最大的就可以。最后别忘了去掉前导零。以及结果是0的特殊情况。

  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <map>
  4. #include <stack>
  5. #include <vector>
  6. #include <math.h>
  7. #include <string.h>
  8. #include <queue>
  9. #include <string>
  10. #include <stdlib.h>
  11. #include <algorithm>
  12. #define LL long long
  13. #define _LL __int64
  14. #define eps 1e-8
  15. #define PI acos(-1.0)
  16. using namespace std;
  17.  
  18. const int maxn = 1000010;
  19.  
  20. int fir[12],sec[12];
  21. char s1[maxn],s2[maxn],ans[maxn];
  22.  
  23. int main()
  24. {
  25. int test,len;
  26. scanf("%d",&test);
  27.  
  28. for(int item = 1; item <= test; item++)
  29. {
  30. scanf("%s %s",s1,s2);
  31. len = strlen(s1);
  32. memset(fir,0,sizeof(fir));
  33. memset(sec,0,sizeof(sec));
  34.  
  35. if(strcmp(s1,"0") == 0)
  36. {
  37. printf("Case #%d: ",item);
  38. printf("%s\n",s2);
  39. continue;
  40. }
  41.  
  42. if(strcmp(s2,"0") == 0)
  43. {
  44. printf("Case #%d: ",item);
  45. printf("%s\n",s1);
  46. continue;
  47. }
  48.  
  49. for(int i = 0; i < len; i++)
  50. {
  51. fir[s1[i]-'0']++;
  52. sec[s2[i]-'0']++;
  53. }
  54.  
  55. int cnt = 0;
  56. int Max = -1;
  57. int a,b;
  58.  
  59. //找第一个数字,不能找前导零
  60. for(int i = 1; i <= 9; i++)
  61. {
  62. if(fir[i] == 0)
  63. continue;
  64. for(int j = 1; j <= 9; j++)
  65. {
  66. if(sec[j] == 0) continue;
  67. int t = (i+j)%10;
  68. if(t > Max)
  69. {
  70. Max = t;
  71. a = i;
  72. b = j;
  73. }
  74. }
  75. }
  76.  
  77. ans[++cnt] = Max + '0';
  78. fir[a]--;
  79. sec[b]--;
  80.  
  81. while(cnt < len)
  82. {
  83. Max = -1;
  84. for(int i = 0; i <= 9; i++)
  85. {
  86. if(fir[i] == 0) continue;
  87. for(int j = 0; j <= 9; j++)
  88. {
  89. if(sec[j] == 0) continue;
  90. int t = (i+j)%10;
  91. if(t > Max)
  92. {
  93. Max = t;
  94. a = i;
  95. b = j;
  96. }
  97. }
  98. }
  99. ans[++cnt] = Max + '0';
  100. fir[a]--;
  101. sec[b]--;
  102. }
  103. printf("Case #%d: ",item);
  104. int i;
  105. for(i = 1; i <= len; i++)
  106. if(ans[i] != '0')
  107. break;
  108. //假设是0,直接输出0
  109. if(i == len+1)
  110. printf("0\n");
  111. else
  112. {
  113. for( ;i <= len; i++)
  114. printf("%c",ans[i]);
  115. printf("\n");
  116. }
  117. }
  118. return 0;
  119. }





Kia&#39;s Calculation(贪心)的更多相关文章

  1. K - Kia's Calculation (贪心)

    Kia's Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  2. HDU-4726 Kia's Calculation 贪心

    题目链接:http://acm.hdu.edu.cn/userstatus.php?user=zhsl 题意:给两个大数,他们之间的加法法则每位相加不进位.现在可以对两个大数的每位重新排序,但是首位不 ...

  3. HDU1009_FatMouse&#39; Trade【贪心】【水题】

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. HihoCoder1653 : 公平分队([Offer收割]编程练习赛39)(贪心)

    描述 小Hi和小Ho在玩一个战争游戏.游戏中2N个战斗单位,其中第i个单位的战斗力是Ai. 现在小Hi和小Ho要各选N个单位组成队伍,当然他们都希望自己队伍的总战斗力越大越好. 为了使分队更加公平,经 ...

  5. 2013 ACM/ICPC Asia Regional Online —— Warmup2

    HDU 4716 A Computer Graphics Problem 水题.略 HDU 4717 The Moving Points 题目:给出n个点的起始位置以及速度矢量,问任意一个时刻使得最远 ...

  6. 贪心 HDOJ 4726 Kia's Calculation

    题目传送门 /* 这题交给队友做,做了一个多小时,全排列,RE数组越界,赛后发现读题读错了,囧! 贪心:先确定最高位的数字,然后用贪心的方法,越高位数字越大 注意:1. Both A and B wi ...

  7. HDU 4726 Kia's Calculation (贪心算法)

    Kia's Calculation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...

  8. HDU 4726 Kia's Calculation(贪心)

    Kia's Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. K - Kia's Calculation(贪心)

    Kia's Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

随机推荐

  1. HTML DOM select() 方法

    定义和用法 select() 方法用于选择该元素中的文本. 语法 textareaObject.select() 实例 下面的例子可选择文本框中的文本: <html> <head&g ...

  2. Aircrack-ng官方文档翻译[中英对照]---Aireplay-ng

    Aircrack-ng官方文档翻译---Aireplay-ng[90%] Description[简介] Aireplay-ng is used to inject frames. Aireplay- ...

  3. bzoj 3065: 带插入区间K小值 替罪羊树 && AC300

    3065: 带插入区间K小值 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1062  Solved: 253[Submit][Status] Des ...

  4. 构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介

    构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介 熟悉将用于 Apache Tuscany SCA for C++ 的 API.您将通过本文了解该 API 的主要组 ...

  5. POJ 2409 Let it Bead(Polya定理)

    点我看题目 题意 :给你c种颜色的n个珠子,问你可以组成多少种形式. 思路 :polya定理的应用,与1286差不多一样,代码一改就可以交....POJ 1286题解 #include <std ...

  6. 【SPOJ 1182】 SORTBIT - Sorted bit squence (数位DP)

    SORTBIT - Sorted bit squence no tags Let's consider the 32 bit representation of all integers i from ...

  7. 设置VS2015上关闭和打开tab快捷键

    Ctrl+W关闭Tab: Tools > Options > Environment > Keyboard > File.Close > Use new shortcut ...

  8. Oracle DBMS_SESSION

    Version 11.1   General Purpose Try dbms_session.reset_package. This call will reset all packages var ...

  9. Android --- px与dip换算

    px = (density/160)dpdensity一般为3个常用固定值240/160/120分别对应WVGA/HVGA/QVGA不知道知己做的分辨率对应的density是多少可以点击AVD Man ...

  10. Devexpress之popupMenu

    1.拖放一个BarManager控件barManager1和一个PopupMenu控件popupMenu1 2.设置popupMenu1的Manager属性为barManager1 3.拖放一个Tex ...