結果
| 問題 |
No.202 1円玉投げ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-08-12 15:15:01 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 80 ms / 5,000 ms |
| コード長 | 1,234 bytes |
| コンパイル時間 | 2,233 ms |
| コンパイル使用メモリ | 160,884 KB |
| 実行使用メモリ | 7,236 KB |
| 最終ジャッジ日時 | 2024-12-22 09:53:34 |
| 合計ジャッジ時間 | 5,304 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 38 |
ソースコード
#include <bits/stdc++.h>
#define rep(i, a) for (int i = 0; i < (a); i++)
#define rep2(i, a, b) for (int i = (a); i < (b); i++)
#define repr(i, a) for (int i = (a) - 1; i >= 0; i--)
#define repr2(i, a, b) for (int i = (b) - 1; i >= (a); i--)
using namespace std;
typedef long long ll;
const ll inf = 1e9;
const ll mod = 1e9 + 7;
const ll U = 100;
const int W = 22000 / U;
const int H = 22000 / U;
vector<int> bucket[W][H];
ll xs[100000], ys[100000];
ll sq(ll x) {
return x * x;
}
bool intersect(int i, int j) {
return sq(xs[j] - xs[i]) + sq(ys[j] - ys[i]) < sq(20);
}
void put(int k) {
ll x = xs[k];
ll y = ys[k];
int bx = x / U;
int by = y / U;
bool b = false;
rep2 (dx, -1, 2) rep2 (dy, -1, 2) {
int nx = bx + dx;
int ny = by + dy;
for (int i : bucket[nx][ny]) {
if (intersect(k, i)) {
b = true;
}
}
}
if (!b) {
bucket[bx][by].push_back(k);
}
}
int main() {
int N;
cin >> N;
rep (i, N) {
cin >> xs[i] >> ys[i];
xs[i] += U;
ys[i] += U;
}
rep (i, N) put(i);
int ans = 0;
rep (i, W) rep (j, H) ans += bucket[i][j].size();
cout << ans << endl;
}