Register_int @ 2023-10-22 22:16:21
rt,不知道为啥挂了 30pts /ll /kk /kel
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int MAXN = 1e5 + 10;
/*
一眼贪心,鉴定为:纯纯的暴力。
*/
int n, m;
ll ans, x, y, a[MAXN], b[MAXN];
int main() {
// freopen("road.in", "r", stdin);
// freopen("road.out", "w", stdout);
scanf("%d%d", &n, &m);
for (int i = 2; i <= n; i++) scanf("%lld", &a[i]), a[i] += a[i - 1];
for (int i = 1; i <= n; i++) scanf("%lld", &b[i]); b[n] = 0;
for (int i = 2, k = 1; i <= n; i++) {
if (b[i] >= b[k]) continue; y = a[i] - a[k];
if (x < y) y -= x, ans += (ll)ceil((long double)y / m) * b[k], x = m - y % m;
else x -= y; k = i;
}
printf("%lld", ans);
}
/*
Register_int AK CSP
orz ZZP
orz MCW
orz CYZ
orz HHX
orz HYT
*/
by Cifera_meow @ 2023-10-22 22:40:03
你的思路是什么?我帮你看一下
by Cifera_meow @ 2023-10-22 22:40:30
我第二题小图灵A了
by zly2009 @ 2023-10-22 22:41:10
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int a[N],v[N];
signed main()
{
// freopen("road.in","r",stdin);
// freopen("road.out","w",stdout);
int n,d;
cin>>n>>d;
for(int i=1;i<n;i++)cin>>v[i];
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=2;i<=n;i++)
if(a[i]>a[i-1])a[i]=a[i-1];
int ans=0;
for(int i=1;i<n;i++){
int m=v[i]/d+(v[i]%d!=0);
int c=m*d-v[i];
v[i+1]-=c;
ans+=a[i]*m;
}
cout<<ans;
}
本人 65pts 代码,看了下您的评测记录,貌似您错的点都对了(
by SJZ2010 @ 2023-10-22 22:44:14
AC,可以拿去拍:
#include <cstdio>
typedef long long ll;
const int N = 1e5 + 5;
ll n, d;
ll dis[N], money[N], nxt[N], dis_sum[N], can_dis, ans;
int main()
{
//freopen("road.in", "r", stdin);
//freopen("road.out", "w", stdout);
scanf("%lld %lld", &n, &d);
ll i, dist, last_m, last_i;
for (i = 1; i < n; i++)
scanf("%lld", &dis[i]);
for (i = 2; i <= n; i++)
dis_sum[i] = dis_sum[i - 1] + dis[i - 1];
for (i = 1; i <= n; i++)
scanf("%lld", &money[i]);
nxt[n - 1] = n;
last_m = money[1];
last_i = 1;
for (i = 2; i <= n - 1; i++)
{
if (money[i] < last_m)
{
nxt[last_i] = i;
last_i = i;
last_m = money[i];
}
}
nxt[last_i] = n;
/*
for (i = 1; i <= n; i++)
printf("%lld ", nxt[i]);
printf("\n");
*/
for (i = 1; i < n;)
{
dist = dis_sum[nxt[i]] - dis_sum[i];
ans += (dist - can_dis + d - 1) / d * money[i];
can_dis += (dist - can_dis + d - 1) / d * d;
can_dis -= dist;//printf("%lld %lld\n", i, money[i]);
i = nxt[i];
}
printf("%lld\n", ans);
return 0;
}
by MeetYouAtNOI @ 2023-10-22 23:13:29
一眼浮点数误差吧