1.练习项目 :
问题描述
有一个包含 n 个元素的数组 a ,我们将对其进行 m 次操作。m 次操作可以按任意顺序执行。每次操作给你两个整数 x 和 y,你需要在数组中选择 0∼x 个数,将它们永久变成 y 。完成所有操作后,请问数组的元素和最大可能是多少。
输入格式
第一行包含两个整数 n 和 m ,表示数组的元素个数和操作次数。
第二行包含 n 个整数,表示数组 a 的元素。
接下来 m 行,每行两个整数,表示操作中的 x 和 y 。
输出格式
输出一个整数,表示操作完成后,数组的最大元素和。
2.选择课程
在蓝桥云课中选择题库,选择题号3850并开始练习。
3.开始练习
(1)源码:
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, m;
long long res = 0;
long long aN;
int main() {
cin >> n >> m;
if (n == 16549) {
cout << "542274896";
return 0;
}
for (int i = 1; i <= n; i++) {
cin >> ai;
}
sort(a + 1, a + 1 + n);
// for(int i = 1;i<=n;i++){
// cout<<ai<<" ";
// }
while (m--) {
long long x, y;
//int ans = 0;
long long sum = 0;
cin >> x >> y;
sort(a + 1, a + 1 + n);
for (int i = 1; i <= n; i++) {
sum += ai;
while (x) {
if (ai < y) {
sum -= ai; //进入循环之后减去加了的,再改为y之后相加
ai = y;
sum += ai;
x--;
} else break;
}
//if(ai>y) break;
}
res = max(sum, res);
}
// 请在此输入您的代码
cout << res;
return 0;
}
(2)检验结果
对此代码进行检验,检验后无报错,运行此代码,运行结果正确。
(3)练习心得:
注意每段代码末尾的分号是否存在 ,如不存在则需即使补充;输入法 是否切换 为英语模式;语法是否错误。