hdu 3044 Dog and dog
http://acm.hdu.edu.cn/showproblem.php?pid=3044
当初我看到它的公式这么复杂,所以就一下子忽略这题了,想起来还真有点后悔。
好的,我翻译一下这一的意思吧!其实就是告诉你两个人和一条狗各时刻的瞬时速度,让你求出两人相遇的时候狗跑了多长的距离。当然,这里的相遇只需要两人相距10m以内。这个看上去很复杂的积分题如果在你做的时候注意一些细节,那么你就可以瞬间秒杀它了。
我的做法是在积分的过程中,把sin(sin2t)sin(cos2t)看做一个整体,假设是间接时间x(因为两者是一一对应的)。那么,此时的两个人对其速度和的积分就只是积v=v1sin(1)/x,最后在两人相遇前,所用的间接时间x=e(l1-10)/t。
同理,对狗的速度的积分将变成v=v2cos(1)*1.55741/x,最后积得间接时间x内狗跑的距离s=v2cos(1)*1.55741*ln x。
整理可得,狗在两人相遇前最多能跑的距离为s=v2cos(1)*1.55741*(l1-10)/v1/sin1。然后就是比较数据给出狗跑的最长距离就可以得出答案了。
View Code
1 #include<stdio.h>
2 #include<math.h>
3 #include<stdlib.h>
4 #include<string.h>
5
6 int main()
7 {
8 int T;
9 double s, l1, l2, v1, v2;
10
11 scanf("%d", &T);
12 while(T--)
13 {
14 scanf("%lf%lf%lf%lf", &l1, &l2, &v1, &v2);
15 s=cos(1)*1.55741*v2*(l1-10)/v1/sin(1);
16 if(s<0)printf("0\n");
17 else if(s>l2)printf("%.0lf\n", l2);
18 else printf("%.0lf\n", s);
19 }
20 return 0;
21 }
2 #include<math.h>
3 #include<stdlib.h>
4 #include<string.h>
5
6 int main()
7 {
8 int T;
9 double s, l1, l2, v1, v2;
10
11 scanf("%d", &T);
12 while(T--)
13 {
14 scanf("%lf%lf%lf%lf", &l1, &l2, &v1, &v2);
15 s=cos(1)*1.55741*v2*(l1-10)/v1/sin(1);
16 if(s<0)printf("0\n");
17 else if(s>l2)printf("%.0lf\n", l2);
18 else printf("%.0lf\n", s);
19 }
20 return 0;
21 }
written by Lyon