#include <bits/stdc++.h>
using namespace std;
int s[1000005], v[1000005], q[1000005];
int main() {
int n, d;
cin >> n >> d;
s[1] = 0;
for (int i = 2; i <= n; i++) {
int t;
cin >> t;
s[i] = t + s[i - 1];
}
for (int i = 1; i <= n; i++) {
cin >> v[i];
}
int cnt = 1;
q[1] = 1;
for (int i = 2; i <= n; i++) {
if (v[i] < v[q[cnt]]) {
cnt++;
q[cnt] = i;
}
}
if (q[cnt] = n) {
q[cnt++] = n;
}
int ans = 0, now = 0;
for (int i = 1; i < cnt; i++) {
int t = s[q[i + 1]] - s[q[i]];
if (t < now) {
now -= t;
} else {
t -= now;
int tep = (t + d - 1) / d;
ans += tep * v[q[i]];
now = tep * d - t;
}
}
cout << ans;
return 0;
}
全部回复 共 1 条
-
#include <bits/stdc++.h> using namespace std; int f(int n) { if (n % 3 == 1) { return 1; } return f(n - (n + 2 ) / 3) + 1; } int main() { long long int n; long long int ans = 0, flag = 0, t, y = 1; cin >> n; int m = n; while (m) { m -= (m + 2) / 3; ans++; } cout << ans << " " << f(n); return 0; }
发表回复
登录后即可回复本帖,与出题人和同学一起讨论。
登录