Editorial for Candycopter
Submitting an official solution before solving the problem yourself is a bannable offence.
Türkçe
Odada bulunan her bir şeker için ayrı ayrı alınabilirlik hesaplamamız gerek, daha sonra da toplam kaç şekerin alınabildiğini bastıracağız. Bir şekerin oyuncak helikopter kullanarak alınabilmesi için odanın kapısı olan \((X,Y,Z) = (0,0,0)\) noktasından şekerin bulunduğu konum olan \((X_i,Y_i,Z_i)\) noktasına olan uzaklığın en fazla \(\frac{\mathbf{M}}{2}\) olması gerekiyor. Böylece helikopter bir kere kalktığında şekeri alıp yerine geri dönebilir.
Her şeker için bu uzaklığı Öklid uzaklığı formülü olan \(\sqrt{(X-X_i)^2 + (Y-Y_i)^2 + (Z-Z_i)^2}\) ile hesaplayabiliriz.
English
For every candy in the room, we need to calculate if the candy can be taken, then we can print the total count of candies we can steal. The toy helicopter can only steal a piece of candy if \((X,Y,Z) = (0,0,0)\), the initial position of the helicopter, is at most \(\frac{\mathbf{M}}{2}\) units from the position of that candy, \((X_i,Y_i,Z_i)\). This way, helicopter can take the candy and fly back to its initial position.
We can compute the Euclidian distance for each candy with the formula \(\sqrt{(X-X_i)^2 + (Y-Y_i)^2 + (Z-Z_i)^2}\).
Örnek Çözüm / Sample Solution
#include <bits/stdc++.h>
using namespace std;
typedef long long Int;
typedef pair<int,int> PII;
typedef vector<int> VInt;
#define FOR(i, a, b) for(i = (a); i < (b); ++i)
#define RFOR(i, a, b) for(i = (a) - 1; i >= (b); --i)
#define EACH(it, a) for(auto it = (a).begin(); it != (a).end(); ++it)
#define CLEAR(a, b) memset(a, b, sizeof(a))
#define SIZE(a) int((a).size())
#define ALL(a) (a).begin(),(a).end()
#define MP make_pair
int main()
{
int n;
Int m;
cin >> n >> m;
int i;
int res = 0;
FOR(i, 0, n)
{
Int x, y, z;
cin >> x >> y >> z;
if(4*(x*x + y*y + z*z) <= m*m) ++res;
}
cout << res << endl;
return 0;
}