有人能告诉我我哪里错了吗?
原题链接:7124.[CSP-J 2023] 公路2024-09-30 23:22:20
发布于:广东
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int dyr(){
ll n,d,money=0,mn=0,sum=0,ok=0;
cin>>n>>d;
vector<ll> v(n-1);
vector<ll> a(n);
for(auto &it:v) cin>>it;
for(auto &it:a) cin>>it;
mn=a[0];
for(int i=0;i<n;i++){
sum+=v[i];
if(ok<sum){
ll jy=ceil((sum-ok)*1.0/d);
money+=jy*mn;
ok+=jy*d;
}
ok-=sum;
sum=0;
mn=min(mn,a[i+1]);
}
cout<<money;
return 0;
}
int main(){
freopen("road.in","r",stdin);
freopen("road.out","w",stdout);
dyr();
fclose(stdin);
fclose(stdout);
}
全部评论 1
#include<bits/stdc++.h>
using namespace std;
#define ll long longint dyr(){
ll n,d,money=0,current_fuel=0; // 将变量名改为更清晰的名称
cin>>n>>d;
vector<ll> v(n-1); // n-1个路段
vector<ll> a(n); // n个站点的油价
for(auto &it:v) cin>>it;
for(auto &it:a) cin>>it;ll min_price = a[0]; // 当前遇到的最低油价 // 只需要遍历n-1个路段,因为有n-1段路连接n个站点 for(int i=0;i<n-1;i++){ ll distance = v[i]; // 当前路段距离 // 如果当前油量不够行驶这段距离,需要加油 if(current_fuel * d < distance){ // 计算需要补充的油量(升),向上取整 ll needed = distance - current_fuel * d; ll fuel_to_add = (needed + d - 1) / d; // 等价于ceil(needed*1.0/d) money += fuel_to_add * min_price; current_fuel += fuel_to_add; } // 行驶当前路段,消耗油量 current_fuel -= distance / d; if(distance % d != 0) current_fuel -= 1; // 处理余数情况 // 更新最低油价(下一个站点的价格) if(i+1 < n) // 防止越界 min_price = min(min_price, a[i+1]); } cout<<money; return 0;
}
int main(){
freopen("road.in","r",stdin);
freopen("road.out","w",stdout);
dyr();
fclose(stdin);
fclose(stdout);
return 0;
}1周前 来自 内蒙古
0
有帮助,赞一个