专栏文章
题解:P12643 [KOI 2024 Round 1] 回收退货
P12643题解参与者 1已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mip6awji
- 此快照首次捕获于
- 2025/12/03 06:52 3 个月前
- 此快照最后确认于
- 2025/12/03 06:52 3 个月前
大家好我是S_M_Y,这是我的第一篇题解。
废话不多说最好不说,开始做题。
目测算法为模拟加一点点数学,不是很难哈。
模拟分两个部分。
首先,卡车第一次经过所有人家。
假设司机第一趟在摸鱼,经过一户人家,如果还没把东西放出来,好的,直接开溜。不然就顺便把东西带上,用标记位置上的货物收了没有。花费的总时间为(因为是一路开到最后一户不停留)。
第二趟,司机折返。
司机摸完鱼,发现自己还落下了一堆货物。检查,如果之前没有收的货物已经放出来了,赶紧带上;如果还没放出来,就只能老老实实地等了。总时间为一路走来加等待的时间。
注意:有可能有一些人家第一趟还没把货物放出来,第二趟走到半路就放出来了,不需要等待。
学废了吗?如果还不会,可以看代码。
CPP废话不多说
目测算法为模拟加一点点数学,不是很难哈。
模拟分两个部分。
首先,卡车第一次经过所有人家。
假设司机第一趟在摸鱼,经过一户人家,如果还没把东西放出来,好的,直接开溜。不然就顺便把东西带上,用标记位置上的货物收了没有。花费的总时间为(因为是一路开到最后一户不停留)。
第二趟,司机折返。
司机摸完鱼,发现自己还落下了一堆货物。检查,如果之前没有收的货物已经放出来了,赶紧带上;如果还没放出来,就只能老老实实地等了。总时间为一路走来加等待的时间。
注意:有可能有一些人家第一趟还没把货物放出来,第二趟走到半路就放出来了,不需要等待。
学废了吗?如果还不会,可以看代码。
#include<bits/stdc++.h>
using namespace std;
long long n,x[3001],t[3001],i,l,r,md,tt,f[3001];
int main(){
cin>>n;
for(i=1;i<=n;i++){
cin>>x[i];
if(x[i]>r) r=x[i];
}
for(i=1;i<=n;i++)
cin>>t[i];
for(i=1;i<=n;i++)
if(tt>=t[i]) f[i]=1;//标记已经拿了的货物
tt=x[n];//一路走来的时间
if(t[n]>tt) tt=t[n];//回头时的特判,因为必须要等最后一户人家把货物放出来才能掉头
for(i=n-1;i>=1;i--){//第二趟
tt+=x[i+1]-x[i];
if(f[i]!=1) if(tt<t[i]) tt=t[i];
}
cout<<tt+x[1];//回到起点
return 0;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...