Pbinfo #841 Bomber
Cerința
Se consideră un poligon militar, pe care este stabilit un sistem de axe de coordonate xOy. Se dau n bombe, numerotate de la 1 la n, pentru fiecare cunoscându-se coordonatele x y și puterea de distrugere p. La explozia unei bombe de putere p se va distruge totul în interiorul și pe cercul de centru x y și rază p, iar dacă există alte bombe în această zonă, vor exploda la rândul lor.
Dându-se numărul de ordine I al unei bombe care explodează, să se determine câte bombe rămân intacte la finalul șirului de explozii declanșate.
Date de intrare
Fișierul de intrare bomber.in conține pe prima linie numerele n I, fiecare dintre următoarele n linii conține câte trei numere x y p, cu semnificația din enunț.
Date de ieșire
Fișierul de ieșire bomber.out va conține pe prima linie numărul C, reprezentând numărul de bombe rămase neexplodate.
Restricții și precizări
1 ≤ n ≤ 100
1 ≤ I ≤ n
coordonatele x y sunt numere întregi, iar puterile p sunt numere naturale
-200 ≤ x , y ≤ 200
* 1 ≤ p ≤ 30
Exemplu
bomber.in
9 5
0 3 2
-1 1 3
1 4 1
3 4 4
-1 -2 3
3 1 3
0 -4 2
3 -2 5
4 -1 2
bomber.out
4
Răspunsuri la întrebare
Răspuns de
1
Răspuns:
#include<fstream>
#include<cmath>
using namespace std;
ifstream cin("bomber.in");
ofstream cout("bomber.out");
struct bomb
{
int x,y,p,on;
}v[101];
inline int comp(int ind,int j)
{
return sqrt((v[ind].x-v[j].x)*(v[ind].x-v[j].x)+(v[ind].y-v[j].y)*(v[ind].y-v[j].y))<=v[ind].p;
}
inline void exploziv(int ind,int n)
{
v[ind].on=1;
for(int i=1;i<=n;i++)
if(!v[i].on)
{
if(comp(ind,i))
exploziv(i,n);
}
}
int main()
{
static int n,ind,k;
cin>>n>>ind;
for(int i=1;i<=n;i++)
cin>>v[i].x>>v[i].y>>v[i].p;
exploziv(ind,n);
for(int i=1;i<=n;i++)
if(!v[i].on)
k++;
cout<<k;
}
Explicație:
Alte întrebări interesante
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Fizică,
8 ani în urmă
Limba română,
9 ani în urmă