题目链接: [CSP-J 2023] 公路
#include<bits/stdc++.h>
using namespace std;
int w[100010];
int a[100010];
int main() {
int n,d;
cin >> n >> d;
for (int i=1;i<n;i++) {
cin >> w[i];
}
for (int i=1;i<=n;i++) {
cin >> a[i];
}
long long q = 0;
long long c = 0;
for (int i=1;i<n;i++) {
if (q >= w[i]) {
q -= w[i];
continue;
}
q += (w[i]/d)*d;
c += (w[i]/d)*a[i];
if (q < w[i]) {
q += d;
c += a[i];
}
int q1 = q;
for (int j=1;j<n;j++) {
q -= w[i+j-1];
if (a[j+i] > a[i]) {
q += (w[j+i]/d)*d;
q1 += (w[j+i]/d)*d;
c += (w[j+i]/d)*a[i];
if (q < w[j+i]) {
q += d;
q1 += d;
c += a[i];
}
} else {
break;
}
}
q = q1;
q -= w[i];
cout << i << "y" << q << endl;
}
cout << c;
}