题解
2026-02-26 12:43:11
发布于:浙江
3阅读
0回复
0点赞
题目解析
- 输入输出:第一行输入两个整数 (储蓄罐数量,编号 到 )和 (总天数)。第二行输入 个整数 ,表示第 天往编号为 的储蓄罐存钱。输出 个整数,第 个整数表示编号为 的储蓄罐中的总金额(即按 的顺序输出)。
- 数据范围:,,所有 满足 。
- 复杂度要求:需遍历 天记录,时间复杂度 ,空间复杂度 ,远低于 和 限制。
- 算法知识点:
简单模拟、数组统计、单点累加
思路解析
- 建立储蓄罐账户:创建一个大小为 的数组
arr(初始化为0),数组下标对应储蓄罐编号,值对应该储蓄罐的累计金额。代码中数组开至 以确保不越界。 - 按天处理存款:关键观察是第 天存入的金额恰好为 元(而非固定金额)。遍历天数 从 到 ,读入当天目标储蓄罐编号 ,执行
arr[x] += i,将 元累加到对应储蓄罐。 - 顺序输出余额:最后顺序遍历编号 到 ,输出每个
arr[i]即为该储蓄罐的最终金额。
完整代码
#include <bits/stdc++.h>
using namespace std;
int arr[2000]; // 储蓄罐金额统计,arr[i]表示编号i的储蓄罐中的总金额
int main() {
int n, m; // n:储蓄罐数量N, m:天数D
cin >> n >> m;
// 遍历第1天到第m天,第i天存入i元钱
for (int i = 1; i <= m; i++) {
int x;
cin >> x; // 读入第i天选中的储蓄罐编号
arr[x] += i; // 关键:第i天存入的金额是i元,累加到对应储蓄罐
}
// 按编号0到n-1顺序输出每个储蓄罐的累计金额
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
这里空空如也

有帮助,赞一个