1005

来源:互联网 发布:关了蜂窝数据还跑流量 编辑:程序博客网 时间:2024/06/05 20:11

题目标号:1015

题目大意:骑车直角拐弯。给4个量,车宽和车长,要拐之前的路的宽度和路拐之后的宽度。求汽车能不能拐过去。

解题思路:猛地一看,这更像个物理数学问题,根据第一感觉,我们应该可以用函数来表示出来汽车能不能拐的一个关键量,设车身与拐之前的路的角度为A,那么可以列出来2个                   关键函数:s = l * cos(θ) + w * sin(θ) - x;h = s * tan(θ) + w * cos(θ);s是车身拐之前的最后面的点距离拐点的水平距离,h则为远离拐点的车身的竖直的高度。如果是用数                   学解决这个问题,应该是用三角函数求极值的问题解决。但我们程序就不一样了,根据计算机的高效性,这明显是个凸的函数,用三分逼近就可以了。

做题感想:实话说,开始遇到这样的题目我是直接懵了的,不知道如何下手的感觉,仔细想想贪心和搜索貌似也没有地图什么的,后来无意看三分可见才发现了它,思路都是老师                       的,我只是理解的基础上的加以总结。学无止境,不进则退。努力吧,骚年!

#include <iostream>#include <stdio.h>#include <math.h>using namespace std;double pi = acos(-1.0);double x,y,l,w,s,h;double cal(double a){    s = l*cos(a)+w*sin(a)-x;    h = s*tan(a)+w*cos(a);    return h;}int main(){    double left,right,mid,midmid;    while(scanf("%lf%lf%lf%lf",&x,&y,&l,&w)!=EOF)    {        left = 0.0;        right = pi/2;        while(fabs(right-left)>1e-8)        {            mid = (left+right)/2;            midmid = (mid+right)/2;            if(cal(mid)>=cal(midmid))right = midmid;            else left = mid;        }        if(cal(mid)<=y)printf("yes\n");        else printf("no\n");    }    return 0;}

0 0
原创粉丝点击