本文共 1025 字,大约阅读时间需要 3 分钟。
拆分队列问题为贪心算法,通过高效确定字符权重位置,解决问题。
在此问题中,我们利用贪心算法,使数值大的字符尽可能落在权重较小的位置。步骤如下:
#includeusing namespace std;char s[500005];int ans[500004];int main() { char c; int sum = 0, cnt = 0, syw = 0, p = 0, w = 0; while ((c = getchar()) != '\n') { if (c == '+') { w++; } else { s[cnt++] = c; } } s[cnt] = '\0'; sort(s, s + cnt); int pos = 0; for (int i = cnt - 1; i >= 0; i -= (w + 1)) { sum = 0; for (int j = i; j >= pos; j--) { sum += s[j] - '0'; } sum += syw; if (pos == 0 && w == 0) ans[p++] = sum % 10; else { ans[p++] = sum % 10; syw = sum / 10; } pos += (w + 1); } if (syw > 0) { ans[p++] = syw; } for (int i = p - 1; i >= 0; i--) { printf("%d", ans[i]); } return 0;}
代码解释:
转载地址:http://jdpaz.baihongyu.com/