1 条题解
-
0
自动搬运
来自洛谷,原作者为

Adolfo_North
暂时的离别是为了更好的重逢。搬运于
2025-08-24 22:25:08,当前版本为作者最后更新于2024-09-09 22:06:05,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这翻译,多读几遍勉强看的懂吧。但题目是真心不难。
我们考虑对于每一艘船,计算渡轮可以通过的时间区间并记录,然后暴力的去计算每两艘船,或者自己和自己可以允许渡轮可以通过的时间段,取最大值即可。
具体看代码(无需多言了吧):
#include<bits/stdc++.h> using namespace std; int n; double w,u,v,t1,t2; struct node{ double l; int val; }; vector<node> G; bool cmp(node x,node y){ if(x.l==y.l) return x.val<y.val; return x.l<y.l; } int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>w>>u>>v>>t1>>t2; G.push_back({t1,0}); G.push_back({t2,0}); for(int i=1,m,dop;i<=n;i++){ char op; cin>>op>>m; if(op=='W') dop=1; else dop=-1; while(m--){ double l,p; cin>>l>>p; double st=max(t1,dop*p/u-w*i/v),en=min(t2,(dop*p+l)/u-w*(i-1)/v); if(st>=t2||en<=t1) continue; G.push_back({st,1}); G.push_back({en,-1}); } } sort(G.begin(),G.end(),cmp); double ans=-1,fl=0; for(size_t i=0;i<G.size()-1;i++){ fl+=G[i].val; if(!fl) ans=max(ans,G[i+1].l-G[i].l); } cout<<fixed<<setprecision(8)<<ans; return 0; }
- 1
信息
- ID
- 6060
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者