这道题目的代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n, w, a[1000005], s[1000005];
signed main(){
cin >> n;
for (int i = 1; i <= n; i++){
cin >> a[i];
}
cin >> w;
sort(a + 1, a + n + 1);
int l = 0, r = n + 1;
a[0] = -1e9;
a[n + 1] = 1e9;
while(l + 1 < r){
int mid = (l + r) / 2;
if (a[mid] <= w){
l = mid;
}
else{
r = mid;
}
}
w = a[l];
for (int i = 1; i <= n; i++) s[i] = s[i - 1] + a[i];
l = 0, r = n + 1;
s[0] = -1e9;
a[n + 1] = 1e9;
while(l + 1 < r){
int mid = (l + r) / 2;
if (s[mid] > w){
r = mid;
}
else{
l = mid;
}
}
cout << l;
return 0;
}
但是,这个代码也可以AC
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n, w, a[1000005], s[1000005];
signed main(){
cin >> n;
for (int i = 1; i <= n; i++){
cin >> a[i];
}
cin >> w;
sort(a + 1, a + n + 1);
int l = 0, r = n + 1;
a[0] = -1e9;
a[n + 1] = 1e9;
while(l + 1 < r){
int mid = (l + r) / 2;
if (a[mid] < w){
l = mid;
}
else{
r = mid;
}
}
w = a[l];
for (int i = 1; i <= n; i++) s[i] = s[i - 1] + a[i];
l = 0, r = n + 1;
s[0] = -1e9;
a[n + 1] = 1e9;
while(l + 1 < r){
int mid = (l + r) / 2;
if (s[mid] > w){
r = mid;
}
else{
l = mid;
}
}
cout << l;
return 0;
}
教练说题目里面好像数据里面没有哪个商品价格刚好等于w,所以请求hack数据