Editorial for Candycopter


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

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;
}