ZOJ Problem Set–1860 Dog & Gopher

Time Limit: 2 Seconds      Memory Limit: 65536 KB


A large field has a dog and a gopher. The dog wants to eat the gopher, while the gopher wants to run to safety through one of several gopher holes dug in the surface of the field.
Neither the dog nor the gopher is a math major; however, neither is entirely stupid. The gopher decides on a particular gopher hole and heads for that hole in a straight line at a fixed speed. The dog, which is very good at reading body language, anticipates which hole the gopher has chosen, and heads at double the speed of the gopher to the hole, where it intends to gobble up the gopher. If the dog reaches the hole first, the gopher gets gobbled; otherwise, the gopher escapes.

You have been retained by the gopher to select a hole through which it can escape, if such a hole exists.

Input

The first line of input contains four floating point numbers: the (x,y) coordinates of the gopher followed by the (x,y) coordinates of the dog. Subsequent lines of input each contain two floating point numbers: the (x,y) coordinates of a gopher hole. All distances are in metres, to the nearest mm.

Input contains multiple test cases. Subsequent test cases are separated with a single blank line.

Output

Your output for each test case should consist of a single line. If the gopher can escape the line should read "The gopher can escape through the hole at (x,y)." identifying the appropriate hole to the nearest mm. Otherwise the output line should read "The gopher cannot escape." If the gopher may escape through more than one hole, choose the first one. There are not more than 1000 gopher holes and all coordinates are between -10000 and +10000.

Sample Input
1.000 1.000 2.000 2.000
1.500 1.500

2.000 2.000 1.000 1.000
1.500 1.500
2.500 2.500

Sample Output
The gopher cannot escape.
The gopher can escape through the hole at (2.500,2.500).


Source: University of Waterloo Local Contest 1999.09.25

 

 

  1: #include<iostream>
  2: #include<string>
  3: #include<sstream>
  4: #include<limits>
  5: #include<stdio.h>
  6: using namespace std;
  7: double distance(double x1, double y1, double x2, double y2)
  8: {
  9:   return (x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2);
 10: }
 11: int main(void)
 12: {
 13:   string coordinates;
 14:   while(getline(cin, coordinates))
 15:   {
 16:     if(coordinates == "") continue;
 17:     string holePosition;
 18:     double x_dog, y_dog, x_gopher, y_gopher;
 19:     double x_hole, y_hole;
 20:     istringstream is(coordinates);
 21:     is>>x_gopher>>y_gopher>>x_dog>>y_dog;
 22:     bool catched = true;
 23:     double nearestDistance = -1,crtDistance, x_nearest, y_nearest;
 24:     while(getline(cin, holePosition))
 25:     {
 26:       if(holePosition == "") break;
 27:       istringstream is0(holePosition);
 28:       is0>>x_hole>>y_hole;
 29:       crtDistance = distance(x_gopher, y_gopher, x_hole, y_hole);
 30:       if(distance(x_dog, y_dog, x_hole, y_hole) > 4*distance(x_gopher, y_gopher, x_hole, y_hole))
 31:       {
 32:         catched = false;
 33:         if(nearestDistance > crtDistance)
 34:         {
 35:           nearestDistance = crtDistance;
 36:           x_nearest = x_hole;
 37:           y_nearest = y_hole;
 38:         }
 39:       }
 40:     }
 41:     if(!catched)
 42:     {
 43:       printf("The gopher can escape through the hole at (%.3f,%.3f).\n", x_nearest, y_nearest);
 44:     }
 45:     else
 46:     {
 47:       cout<<"The gopher cannot escape."<<endl;
 48:     }
 49:   }
 50:   return 0;
 51: }

转载于:https://www.cnblogs.com/malloc/archive/2012/05/24/2516004.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值