hdu 2701

地址:http://acm.hdu.edu.cn/showproblem.php?pid=2701

题意:你有一双可以瞬移的鞋子,任务是要捕捉一直可以瞬移的萤火虫。给出自己每次瞬移的最远距离和起始坐标,再依次给出这只萤火虫出现的坐标。每次虫子出现,你都向它的坐标瞬移。一旦你和虫的距离不超过1,则认为捕捉到。问虫子在哪个坐标被捕捉到(或不能被捕捉到)。

mark:阅读题。阅读了好久,题目又臭又长,只要明白了题意很容易1A。。。

代码:

 1 # include <stdio.h>
 2 # include <math.h>
 3 
 4 
 5 int r, x, y ;
 6 
 7 
 8 double dist(double ax, double ay, double bx, double by)
 9 {
10     return sqrt((ax-bx)*(ax-bx) + (ay-by)*(ay-by)) ;
11 }
12 
13 
14 void work(int cas)
15 {
16     double sx = x, sy = y, ex, ey, t ;
17     int flag = 0 ;
18     while (1)
19     {
20         scanf ("%lf%lf", &ex, &ey) ;
21         if (ex < 0 && ey < 0) break ;
22         if (flag) continue ;
23         if (dist(sx, sy, ex, ey) <= r+1.0)
24         {
25             printf ("Firefly %d caught at (%.0lf,%.0lf)\n", cas, ex, ey) ;
26             flag = 1 ;
27             //return ;
28         }
29         t = r*1.0 / dist(sx, sy, ex, ey) ;
30         sx = sx + (ex-sx)*t ;
31         sy = sy + (ey-sy)*t ;
32     //    printf ("%lf, %lf\n", sx, sy) ;
33     }
34     if (!flag) printf ("Firefly %d not caught\n", cas) ;
35 }
36 
37 
38 int main ()
39 {
40     int nCase = 1 ;
41     while (scanf ("%d%d%d", &r, &x, &y) && (r||x||y))
42         work(nCase++) ;
43     return 0 ;
44 }

 

posted @ 2013-09-03 21:31  Seraph2012  阅读(428)  评论(0编辑  收藏  举报