ACM水题 ,通不过哦
Description:Altynai是一个DOTA菜鸟,平常有空的时候会和室友联机打打电脑==现在他又在玩了..这次他选择了屠夫这个英雄..现在我们想象是在一个2维平面...
Description:
Altynai是一个DOTA菜鸟,平常有空的时候会和室友联机打打电脑 = = 现在他又在玩了..这次他选择了屠夫这个英雄..
现在我们想象是在一个2维平面上,我们把每个英雄简化成一个点,屠夫能向每个方向发射出一个肉钩,当然这个钩子有一定的长度上限L.
当钩子在射出去的过程中碰到敌方英雄时,由于钩子的关系,敌方英雄就会被拉到屠夫身边,并且减少一定的生命值..当生命值<=0时,英雄就会死亡..
并且钩子产生的伤害和射出去的距离成正比,其中 伤害=伤害系数R*射出距离..
由于有视野的关系,所以现在Altynai知道敌方5个英雄的位置(英雄不会重合)和当前的生命值..
现在问题就来了,由于魔法值的限制..Altynai只用一次肉钩,但他很希望干掉对方的一个英雄,请你帮帮他,看看他的愿望能不能实现.
Input:
有多组数据,每组数据以两个整数X,Y开始.表示当前屠夫所在的位置.(-1000<=X,Y<=1000) 接下去5行,每行有3个整数x,y,hp(-1000<=x,y<=1000,100<=hp<=3000),表示每个敌方英雄所在的坐标和当前的生命值. 最后一行是1个整数L(1<=L<=1500)和1个实数R(1<=R<=5)
Output:
如果Altynai能干掉敌方一个英雄,输出"YES",否则"NO".
Sample Input:
0 0
1 1 500
2 3 600
-1 4 800
3 4 400
2 9 1000
300 1.0
Sample Output:
NO
下面是我编的,请高手改错
#include <iostream>
#include <cmath>
using namespace std;
int damage(int a[2],int b[5][3],int l,float r)
{
int i,j;
float d[5];
for(i=0;i<5;i++)
d[i]=sqrt((a[0]-b[i][0])*(a[0]-b[i][0])*1.0+(a[1]-b[i][1])*(a[1]-b[i][1]));
for(i=0;i<5;i++)
for(j=0;j<3;j++)
if(l>=d[i]&&r*d[i]>=b[i][2]) return 1;
return 0;
}
void main()
{
int a[2],b[5][3],L,i;
float R;
cin>>a[0]>>a[1];
for(i=0;i<5;i++)
cin>>b[i][0]>>b[i][1]>>b[i][2];
cin>>L>>R;
if(damage(a,b,L,R)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
} 展开
Altynai是一个DOTA菜鸟,平常有空的时候会和室友联机打打电脑 = = 现在他又在玩了..这次他选择了屠夫这个英雄..
现在我们想象是在一个2维平面上,我们把每个英雄简化成一个点,屠夫能向每个方向发射出一个肉钩,当然这个钩子有一定的长度上限L.
当钩子在射出去的过程中碰到敌方英雄时,由于钩子的关系,敌方英雄就会被拉到屠夫身边,并且减少一定的生命值..当生命值<=0时,英雄就会死亡..
并且钩子产生的伤害和射出去的距离成正比,其中 伤害=伤害系数R*射出距离..
由于有视野的关系,所以现在Altynai知道敌方5个英雄的位置(英雄不会重合)和当前的生命值..
现在问题就来了,由于魔法值的限制..Altynai只用一次肉钩,但他很希望干掉对方的一个英雄,请你帮帮他,看看他的愿望能不能实现.
Input:
有多组数据,每组数据以两个整数X,Y开始.表示当前屠夫所在的位置.(-1000<=X,Y<=1000) 接下去5行,每行有3个整数x,y,hp(-1000<=x,y<=1000,100<=hp<=3000),表示每个敌方英雄所在的坐标和当前的生命值. 最后一行是1个整数L(1<=L<=1500)和1个实数R(1<=R<=5)
Output:
如果Altynai能干掉敌方一个英雄,输出"YES",否则"NO".
Sample Input:
0 0
1 1 500
2 3 600
-1 4 800
3 4 400
2 9 1000
300 1.0
Sample Output:
NO
下面是我编的,请高手改错
#include <iostream>
#include <cmath>
using namespace std;
int damage(int a[2],int b[5][3],int l,float r)
{
int i,j;
float d[5];
for(i=0;i<5;i++)
d[i]=sqrt((a[0]-b[i][0])*(a[0]-b[i][0])*1.0+(a[1]-b[i][1])*(a[1]-b[i][1]));
for(i=0;i<5;i++)
for(j=0;j<3;j++)
if(l>=d[i]&&r*d[i]>=b[i][2]) return 1;
return 0;
}
void main()
{
int a[2],b[5][3],L,i;
float R;
cin>>a[0]>>a[1];
for(i=0;i<5;i++)
cin>>b[i][0]>>b[i][1]>>b[i][2];
cin>>L>>R;
if(damage(a,b,L,R)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
} 展开
1个回答
展开全部
#include <iostream>
#include <cmath>
using namespace std;
int damage(int a[2],int b[5][3],int l,float r)
{
int i;
float d[5];
for(i=0;i<5;i++)
d[i]=sqrt((a[0]-b[i][0])*(a[0]-b[i][0])*1.0+(a[1]-b[i][1])*(a[1]-b[i][1]));
for(i=0;i<5;i++)
if(l>=d[i]&&r*d[i]>=b[i][2]) return 1;
return 0;
}
void main()
{
int a[2],b[5][3],L,i;
float R;
cin>>a[0]>>a[1];
for(i=0;i<5;i++)
cin>>b[i][0]>>b[i][1]>>b[i][2];
cin>>L>>R;
if(damage(a,b,L,R)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
这样就好了。
#include <cmath>
using namespace std;
int damage(int a[2],int b[5][3],int l,float r)
{
int i;
float d[5];
for(i=0;i<5;i++)
d[i]=sqrt((a[0]-b[i][0])*(a[0]-b[i][0])*1.0+(a[1]-b[i][1])*(a[1]-b[i][1]));
for(i=0;i<5;i++)
if(l>=d[i]&&r*d[i]>=b[i][2]) return 1;
return 0;
}
void main()
{
int a[2],b[5][3],L,i;
float R;
cin>>a[0]>>a[1];
for(i=0;i<5;i++)
cin>>b[i][0]>>b[i][1]>>b[i][2];
cin>>L>>R;
if(damage(a,b,L,R)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
这样就好了。
更多追问追答
追问
这个for(j=0;j<3;j++)确实是我忘删了,不过这并不是问题所在,我感觉好像是得把坐标,L,R的限制关系考虑进去
追答
没有考虑到屠夫在放钩子的时候,有可能他和某位英雄的距离和对他产生的伤害可以把他杀死,但是屠夫的钩子无法钩到他,也就是说在他们两个英雄的连线上至少一个英雄,这种情况没有讨论,所以应该讨论屠夫能否真正钩中所要钩中的英雄。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询