题目链接
http://acm.fzu.edu.cn/problem.php?pid=2286
题目
Simon最近迷上了一款RPG游戏,现在他要从坐标(0,0)沿着y轴跑到坐标(0,100),他每秒能跑1个单位长度。
可是沿途的怪物可不会让他这么容易的就跑到,怪物会选择最优路径进行拦截,而且每个怪物跑的都比Simon快。
当怪物和Simon在同一坐标的时候,就会爆发战斗。但是Simon强,无敌,战斗一开始就可以把怪物秒了(也就是说,战斗是不消耗时间的)。
现在Simon想知道跑到目的地前他要和几只怪物战斗。(在目的地爆发的战斗也要计算在内)
Input
题目包含多组测试数据,每组测试数据第一行包含一个正整数n,表示怪物个数。
接下来n行,每行三个整数x,y,v,表示怪物当前的坐标和移动速度(单位长度/秒)。
n≤10^5,-1000<=x<=1000,-1000<=y<=1000,1<=v<=1000
Output
输出一个整数,表示战斗场数
Sample Input
3
0 0 5
0 200 1
0 201 1
Sample Output
2
分析
让每一个怪物在终点等Simon即可。
AC代码
#include <cstdio>
#include <queue>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
#define eps 0.0000000001
const int maxn=1e5+100;
double dis(double x,double y)
{
return sqrt((y-100)*(y-100)+x*x);
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int ans=0;
double x,y,v;
for(int i=0;i<n;i++)
{
scanf("%lf%lf%lf",&x,&y,&v);
double t=dis(x,y)/v;
if(t<100) ans++;
else if(fabs(t-100)<=eps) ans++;
}
printf("%d\n",ans);
}
return 0;
}