cf Chris and Road 题解

(第一次写题解望大家见谅)

作为一个蒟蒻一开始真的感觉这题好复杂,但经过学长的点拨,真的是云开见雾,发现这是一道极其简单的——数学题,正好用坐标轴去理解。我们可将车视为基准物,而车的左移对于人来说就是右移,而人本身就要上移,因此,若将车看成静止的话,就是人在向右上移,从原点开始向右上移,就可将人的路径看成是一条经过原点的直线,要使其不被车撞到,即将直线让原点旋转,与车接触的第一个点的斜率与人和车的速率比进行比较,如图(听说要用图床传图就放弃了)的两条直线,即为对应的关系。
这是一开始画的,本来没看见横坐标有负的情况这是存在横坐标为负的情况

注意:1、测试数据中有横坐标为负的值!!! 因此因找到最低点进行判断与寻找

最后ac是考虑了x为负时,人必不可能冲,必须得等车过去了才能走(测试数据41那里卡了好久)
(真的卡了好久。。。cf上的数据异常刁钻)

#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<set>
#include<cstdlib>
#include<algorithm>//头文件没有都用
using namespace std;
int main()
{
	int n;
	double u,v,w;
	while(~scanf("%d%lf%lf%lf",&n,&w,&v,&u))//'~'这个其实和"!=EOF"一样
	{
		bool ok=false,okk=false,f=false;//f标记是否车上有点在左侧
		double x,y,ans=0;
		for(int i=0;i<n;i++)
		{
			scanf("%lf%lf",&x,&y);
			if(x<0) f=true;
			if(y/x>u/v) ok=true;
			if(y/x<u/v)  okk=true;
			if(x/v+(w-y)/u>ans) ans=x/v+(w-y)/u;
		}
		if(ok&&okk||f) printf("%.10lf\n",ans);
		else printf("%.10lf\n",w/u);
	}
}

(打题解不易(虽说不多),不喜吻喷,谢谢大家嘞!)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值