如在样例
6 20
4 2 7 5 6 1
1 2 1 3 1 7
时我的结果是20,而正确答案为19。 我看半天也没看出与dengjunhaodejia09的题解的差别
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 3e5 + 5;
struct node {
int x, y;
bool operator < (const node& b)const {
return x < b.x;
}
};
node a[N];
int n, m;
void solve() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i].x;
}
for (int i = 1; i <= n; i++) {
cin >> a[i].y;
}
sort(a + 1, a + n + 1);
int ma = 0;
for (int i = 1; i <= n; i++) {
int t = min(m / a[i].x, a[i].y);
ma = max(ma, t * a[i].x);
if (i != n && a[i + 1].x - 1 == a[i].x) {
int tt = min((m - t) / a[i + 1].x, a[i + 1].y);
int b = a[i + 1].y - tt;
int ttt = min(m - t * a[i].x - tt * a[i + 1].x, b);
ttt = min(ttt, t);
ma = max(ma, tt * a[i + 1].x + t * a[i].x + ttt);
}
}
cout << ma << endl;
}
signed main()
{
int T = 1;
cin >> T;
while (T--) {
solve();
}
}