Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <assert.h>
- #include <sstream>
- #include <complex>
- #include <numeric>
- #include <cstring>
- #include <vector>
- #include <string>
- #include <cstdio>
- #include <queue>
- #include <cmath>
- #include <map>
- #include <set>
- using namespace std;
- #define all(a) (a).begin(), (a).end()
- #define sz(a) int((a).size())
- #define FOR(i, a, b) for (int i(a); i < b; ++i)
- #define REP(i, n) FOR(i, 0, n)
- #define UN(v) sort(all(v)), (v).erase(unique((v).begin(), (v).end()), (v).end())
- #define CL(a, b) memset(a, b, sizeof a)
- #define pb push_back
- #define X first
- #define Y second
- typedef long long ll;
- typedef vector <int> vi;
- typedef pair <int, int> pii;
- pii operator + (const pii &p, const pii &q) {
- return pii(p.X + q.X, p.Y + q.Y);
- }
- int main() {
- #ifndef LocalHost
- freopen("circles.in", "r", stdin);
- freopen("circles.out", "w", stdout);
- #endif
- for (int n, R; cin >> n >> R && (n || R); ) {
- vector<pii> p(n), q, v;
- REP (i, n) {
- cin >> p[i].X >> p[i].Y;
- }
- q = p;
- sort(all(q));
- for (int S = sqrt(R), x = -S; x <= S; ++x) {
- int y = sqrt(R - x * x);
- if (x * x + y * y == R) {
- v.pb(pii(x, -y));
- if (y) v.pb(pii(x, y));
- }
- }
- vi res(n);
- REP (l, sz(v)) {
- for (int i = 0, j = 0; i < n; ++i) {
- for (; j < n && q[j] + v[l] < q[i]; ++j);
- if (j < n && q[j] + v[l] == q[i]) {
- ++res[i];
- }
- }
- }
- REP (i, n) {
- if (i) cout << ' ';
- cout << res[lower_bound(all(q), p[i]) - q.begin()];
- }
- cout << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement