#include <iostream> #include <string> #include <algorithm> typedef long long LL; using namespace std; int check(int d, int n, int a[], int k) { LL s = 0; for(int i = 1; i <= n; i++) { if(a[i] >= d) { s += a[i] - d; } } if(s >= k) { return 1; } else { return 0; } } int main() { int n, k; cin >> n >> k; int a[n]; int mx = 0; for(int i = 0; i < n; i++) { cin >> a[i]; mx = max(mx, a[i]); } int l = 0; int r = mx; int ans = 0; while(l <= r) { int mid = (l + r) / 2; if(check(mid, n, a, k) == 1) { ans = mid; l = mid + 1; } else { r = mid - 1; } } cout << ans << endl; return 0; } 将其中的a数组换成vector
时间: 2024-01-14 21:02:25 浏览: 64
修改后的代码如下:
```
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
typedef long long LL;
using namespace std;
int check(int d, int n, vector<int>& a, int k) {
LL s = 0;
for(int i = 0; i < n; i++) {
if(a[i] >= d) {
s += a[i] - d;
}
}
if(s >= k) {
return 1;
} else {
return 0;
}
}
int main() {
int n, k;
cin >> n >> k;
vector<int> a(n);
int mx = 0;
for(int i = 0; i < n; i++) {
cin >> a[i];
mx = max(mx, a[i]);
}
int l = 0;
int r = mx;
int ans = 0;
while(l <= r) {
int mid = (l + r) / 2;
if(check(mid, n, a, k) == 1) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
cout << ans << endl;
return 0;
}
```
修改后的代码使用 vector 来存储输入的 a 数组,可以避免数组越界的问题。同时还需要改变 check 函数中的 a 数组的访问方式,即将 a[i] 改为 a[i-1],因为 vector 的下标从 0 开始。
阅读全文