趣味两题-(简单追及问题、两直线相交问题)

问题 F: 逃出湖心(数学题)

时间限制: 1 Sec  内存限制: 32 MB
提交: 65  解决: 20
[提交][状态][讨论版]

题目描述

一日,话说0068与***泛舟湖上。忽见岸边出现他的一大敌人elnil。0068当然不想落入elnil的魔爪,于是他就得想办法逃脱。

这个湖是一个很规则的圆形,半径为R。此时0068正好在圆心位置。小船在湖中的速度为 V1,0068和elnil在岸上的速度都为V2。也就是说,如果0068在刚上岸的时候没被抓到,则他可逃脱。在任意时刻,0068和elnil都可以朝任何方向移动,但是0068不能一直呆上船上(会饿死的),elnil不能下水(他不会游泳)。假设0068和elnil都非常聪明,总能做对自己最有利的事情,而且两个人的体力都是无限的。

请问,0068最终能不能逃脱elnil的魔爪?

输入

本题目包含多组测试。请处理到文件结束。
每组测试包含三个整数,R,V1,V2。

输出

对于每组数据,如果0068能够安全逃脱,输出Yes,否则输出No。
数据不会出现正好抓到的情况,所以你可不用太考虑临界点。

样例输入

100 10 20

100 10 50

样例输出

Yes

No

 

解题思路:

  人一开始在圆心,怪物在岸上

  人若要成功脱离,就得找到从水中成功上岸的最短距离

  现在,人在圆心,怪物在B点,A点为B点相对于圆心的对称点

  那么人如果此时向A点运动,怪物B便绕园做圆周运动

  但此种方法并非人从水中成功上岸的最短距离。

  设想,当人从圆心往岸边运动,直到人的角速度Ω人=Ω怪物时,假设人此时在C点

  那么此时人和怪物作角速度相同的圆周运动

  但当,人的速度快了那么一点点的时候,此时

  人到了C点关于原点的对称点,怪物在B点

  那么此时人只要往A点运动 便是人从水中成功上岸的最短距离。

  

 

代码便是:

 1 #include <stdio.h>
 2 #define PI 3.1415926
 3 
 4 int main()
 5 {
 6     float r,v1,v2,t1,t2,rr;
 7     while(scanf("%d%d%d",&r,&v1,&v2)!=EOF)
 8     {
 9         rr=v1*r/v2;
10         t1=(r-rr)/v1;
11         t2=(PI*r)/v2;
12         
13         if(t1<t2)
14             printf("Yes\n");
15         else
16             printf("No\n");
17     }
18     return 0;
19 }

 

 

 

问题 B: 香蕉还是相交?

时间限制: 1 Sec  内存限制: 64 MB
提交: 936  解决: 143
[提交][状态][讨论版]

题目描述

小菜最喜欢吃香蕉啦~所以千万别在小菜面前提香蕉两字,不然他肯定缠着问你要~哈哈~。What?“相交”也读作“香蕉”,好吧,那我们就慷慨点吧,来算算下面的问题有没有小菜喜欢的东西。

输入

每组数据为两行,包含8个整数,分别表示四个坐标,(X1,Y1)至(X4,Y4),0<=Xi,Yi<=1000,前两个坐标和后两个坐标分别确定一条直线,计算这两条直线是否相交?

输出

两条直线若相交,输出Yes,若不相交,输出No,每个实例输出为一行

样例输入

1 1 2 2

2 1 3 2

1 1 2 2

2 1 3 3

样例输出

No

Yes

 

解题思路:

  如果两条直线重合呢?算是相交

  如果一条直线斜率存在另一条不存在呢?

  如果两条直线斜率都不存在呢?

 

请看代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 int main()
 4 {
 5     int x1,y1,x2,y2,x3,y3,x4,y4;
 6     while (scanf("%d%d%d%d",&x1,&y1,&x2,&y2)!=EOF)
 7     {
 8         scanf("%d%d%d%d",&x3,&y3,&x4,&y4);
 9 
10         int d1=(y2-y1)*(x4-x3);//判断两条直线斜率是否相等,和斜率不存在时判断两直线是否平行
11         int d2=(x2-x1)*(y4-y3);
12         
13         int d3=(y3-y1)*(x2-x1);//判断两条直线是否重合
14         int d4=(x3-x1)*(y2-y1);
15         if (d1 == d2&&d3 !=d4)
16             printf("No\n");
17         else printf("Yes\n");
18     }
19     return 0;
20 }

 

posted @ 2013-12-05 23:20  Jeremy Wu  阅读(1820)  评论(0编辑  收藏  举报