CF1567D Expression Evaluation Error
CF1567D Expression Evaluation Error
一道水贪心.
显然, 我们把十进制转化成十一进制之后尽量不要进位, 因为我们本来一个 在十进制就是 , 不拆的话到了十一进制就是十进制下的 , 但如果拆了, 那就是十进制下的 了.
所以我们先按照位数拆, 把每一位拆成不同的 .
如果 的个数够, 直接输出前 个 , 剩下的数加和输出, 不用担心进位问题, 因为我们把每一位都拆了, 所以每一位上 的个数不超过 个.
如果不够, 那我们就拆, 从 的最小的 的次幂开始拆, 这样能保证我们亏的最少, 把 拆成 个 , 直到 的数量够, 然后按照上面输出就行了.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int read() {
int x = 0, f = 1;
char ch = getchar();
while (!isdigit(ch)) {
if (ch == '-') f = -1;
ch = getchar();
}
while (isdigit(ch)) {
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
return x * f;
}
int s, n;
priority_queue <int, vector <int>, greater <int> > q;
int main() {
int T = read();
while (T--) {
s = read(), n = read();
while (q.size()) q.pop();
for (int tmp = s, num = 1; tmp; tmp /= 10, num *= 10) {
int x = tmp % 10;
for (int i = 1; i <= x; i++) q.push(num);
}
while (n > q.size()) {
int x = q.top(); q.pop();
while (x == 1) {
printf("1 ");
x = q.top(); q.pop(); n--;
}
x /= 10;
for (int i = 1; i <= 10; i++) q.push(x);
}
int x = 0;
for (int i = 1; i < n; i++) {
x = q.top(); q.pop();
printf("%d ", x);
}
x = 0;
while (q.size()) {
x += q.top();
q.pop();
}
printf("%d\n", x);
}
return 0;
}
看不见我看不见我看不见我
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】博客园2025新款「AI繁忙」系列T恤上架,前往周边小店选购
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 通过一个DEMO理解MCP(模型上下文协议)的生命周期
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· AI浏览器自动化实战
· Chat to MySQL 最佳实践:MCP Server 服务调用
· 解锁.NET 9性能优化黑科技:从内存管理到Web性能的最全指南
· .NET周刊【3月第5期 2025-03-30】
· 重生之我是操作系统(八)----文件管理(上)
2019-09-07 均分纸牌
2019-09-07 排队接水