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 puterilep
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
Explicație
Bombele sunt dispuse ca în desen:
Mai întâi va exploda bomba colorată cu verde, apoi cele colorate cu roșu, apoi cea colorată cu mov, apoi cea colorată cu negru.
Cele 4
bombe colorate cu albastru nu vor exploda.
#include <bits/stdc++.h> using namespace std; ifstream cin("bomber.in"); ofstream cout("bomber.out"); int n , I; struct shen { int x , y , p; }v[101]; bool puscate[101]; int dist(int a , int b , int c , int d) { return sqrt((a - c) * (a - c) + (b - d) * (b - d)); } void pusc(int i , int j , int putere , int q) { puscate[q]=1; for(int k = 1 ; k <= n ; ++k) { if(dist(v[k].x , v[k].y , i , j) <= putere && k!=q && puscate[k]==0) pusc(v[k].x , v[k].y , v[k].p , k); } } int main() { cin >> n >> I; for(int i = 1 ; i <= n ; ++i) cin >> v[i].x >> v[i].y >> v[i].p; pusc(v[I].x , v[I].y , v[I].p , I); int cnt=0; for(int i = 1 ; i <= n ; ++i) if(puscate[i]==0) cnt++; cout << cnt; return 0; }