Submission #30518
Source Code Expand
#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
template <class T>
class myset {
public:
myset()
{
top = NULL;
}
~myset()
{
clear(top);
}
bool empty(void)
{
if (top == NULL) {
return true;
} else {
return false;
}
}
int size(void)
{
return size(top);
}
void insert(T key)
{
top = insert(top, key);
}
void erase(T key)
{
top = erase(top, key);
}
int find(T key)
{
int tmp = find(top, key);
if (tmp == -1) tmp = size(top);
return tmp;
}
int count(T key)
{
return count(top, key);
}
void clear(void)
{
clear(top);
top = NULL;
}
T rank(int n)
{
return rank(top, n);
}
int lower_bound(T key)
{
int tmp = lower_bound(top, key);
if (tmp == -1) tmp = size(top);
return tmp;
}
int upper_bound(T key)
{
int tmp = upper_bound(top, key);
if (tmp == -1) tmp = size(top);
return tmp;
}
private:
typedef struct _myset {
T key;
int size;
int height;
struct _myset *child[2];
} _myset;
_myset *top;
int size(_myset *s)
{
if (s == NULL) {
return 0;
} else {
return s->size;
}
}
int height(_myset *s)
{
if (s == NULL) {
return 0;
} else {
return s->height;
}
}
_myset *balance(_myset *s)
{
for (int i = 0; i < 2; i++) {
if (height(s->child[!i]) - height(s->child[i]) < -1) {
if (height(s->child[i]->child[!i]) - height(s->child[i]->child[i]) > 0) {
s->child[i] = rotate(s->child[i], i, !i);
}
return rotate(s, !i, i);
}
}
if (s != NULL) {
if (height(s->child[0]) > height(s->child[1])) {
s->height = height(s->child[0]) + 1;
} else {
s->height = height(s->child[1]) + 1;
}
s->size = size(s->child[0]) + size(s->child[1]) + 1;
}
return s;
}
_myset *rotate(_myset *s, int l, int r)
{
_myset *t = s->child[r];
s->child[r] = t->child[l];
t->child[l] = balance(s);
if (s != NULL) s->size = size(s->child[0]) + size(s->child[1]) + 1;
if (t != NULL) t->size = size(t->child[0]) + size(t->child[1]) + 1;
return balance(t);
}
_myset *insert(_myset *s, T key)
{
if (s == NULL) {
_myset *tmp = new _myset;
tmp->key = key;
tmp->size = 1;
tmp->height = 1;
tmp->child[0] = NULL;
tmp->child[1] = NULL;
return tmp;
}
if (key < s->key) {
s->child[0] = insert(s->child[0], key);
} else if (key == s->key) {
return s;
} else {
s->child[1] = insert(s->child[1], key);
}
s->size++;
return balance(s);
}
_myset *move_down(_myset *s, _myset *t)
{
if (s == NULL) return t;
s->child[1] = move_down(s->child[1], t);
return balance(s);
}
_myset *erase(_myset *s, T key)
{
if (s == NULL) return NULL;
if (key < s->key) {
s->child[0] = erase(s->child[0], key);
} else if (key == s->key) {
_myset *tmp = move_down(s->child[0], s->child[1]);
delete s;
return tmp;
} else {
s->child[1] = erase(s->child[1], key);
}
s->size--;
return balance(s);
}
int find(_myset *s, T key)
{
if (s == NULL) return -1;
if (key < s->key) {
return find(s->child[0], key);
} else if (key == s->key) {
return size(s->child[0]);
} else {
int tmp = find(s->child[1], key);
if (tmp >= 0) tmp += size(s->child[0]) + 1;
return tmp;
}
}
int count(_myset *s, T key)
{
if (s == NULL) return 0;
if (key < s->key) {
return count(s->child[0], key);
} else if (key == s->key) {
return 1;
} else {
return count(s->child[1], key);
}
}
void clear(_myset *s)
{
if (s == NULL) return;
if (s->child[0] != NULL) clear(s->child[0]);
if (s->child[1] != NULL) clear(s->child[1]);
delete s;
}
T rank(_myset *s, int n)
{
int m = size(s->child[0]);
if (n < m) {
return rank(s->child[0], n);
} else if (n == m) {
return s->key;
} else {
return rank(s->child[1], n - m - 1);
}
}
int lower_bound(_myset *s, T key)
{
if (s == NULL) return -1;
if (key < s->key) {
int tmp = lower_bound(s->child[0], key);
if (tmp == -1) {
return size(s->child[0]);
} else {
return tmp;
}
} else if (key == s->key) {
return size(s->child[0]);
} else {
int tmp = lower_bound(s->child[1], key);
if (tmp == -1) {
return tmp;
} else {
return size(s->child[0]) + tmp + 1;
}
}
}
int upper_bound(_myset *s, T key)
{
if (s == NULL) return -1;
if (key < s->key) {
int tmp = upper_bound(s->child[0], key);
if (tmp == -1) {
return size(s->child[0]);
} else {
return tmp;
}
} else {
int tmp = upper_bound(s->child[1], key);
if (tmp == -1) {
return tmp;
} else {
return size(s->child[0]) + tmp + 1;
}
}
}
};
double dist(double x1, double y1, double x2, double y2)
{
return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
pair <double, double> p[200000];
myset <pair<double, double> > s;
int main()
{
int n, i, j;
double r;
scanf("%d %lf", &n, &r);
for (i = 0; i < n; i++) scanf("%lf %lf", &p[i].first, &p[i].second);
sort(p, p + n);
for (i = 0; i < n; i++) {
int a;
a = s.lower_bound(make_pair(p[i].first - r - 0.1, p[i].second));
for (j = a; j < s.size(); j++) {
pair <double, double> p1 = s.rank(j);
if (dist(p1.first, p1.second, p[i].first, p[i].second) <= r * 2) break;
}
if (j == s.size()) s.insert(make_pair(p[i].first, p[i].second));
}
printf("%d\n", s.size());
return 0;
}
Submission Info
Submission Time
2012-07-01 16:57:12+0900
Task
G - 村
User
kawatea
Language
C++ (G++ 4.6.4)
Score
15
Code Size
7776 Byte
Status
TLE
Exec Time
4030 ms
Memory
11396 KiB
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:328:28: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
./Main.cpp:330:72: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
Judge Result
Set Name
Partial 1
All
Score / Max Score
15 / 15
0 / 85
Status
Set Name
Test Cases
Partial 1
00_random_0, 00_random_1, 00_random_10, 00_random_11, 00_random_2, 00_random_3, 00_random_4, 00_random_5, 00_random_6, 00_random_7, 00_random_8, 00_random_9, 00_sample_0, 00_sample_1, 00_sample_2
All
00_random_0, 00_random_1, 00_random_10, 00_random_11, 00_random_2, 00_random_3, 00_random_4, 00_random_5, 00_random_6, 00_random_7, 00_random_8, 00_random_9, 00_sample_0, 00_sample_1, 00_sample_2, 10_random_12, 10_random_13, 10_random_14, 10_random_15, 10_random_16, 10_random_17, 10_random_18, 10_random_19, 10_random_20, 10_random_21, 10_random_22, 10_random_23, 11_exact_0, 11_exact_1, 11_exact_10, 11_exact_11, 11_exact_2, 11_exact_3, 11_exact_4, 11_exact_5, 11_exact_6, 11_exact_7, 11_exact_8, 11_exact_9, 12_dup_0, 12_dup_1, 12_dup_2, 21_grid_0, 21_grid_1, 21_grid_10, 21_grid_2, 21_grid_3, 21_grid_4, 21_grid_5, 21_grid_6, 21_grid_7, 21_grid_8, 21_grid_9, 22_radial_0, 22_radial_1, 22_radial_2, 22_radial_3, 80_random_24, 80_random_25, 80_random_26, 80_random_27, 80_random_28, 80_random_29, 80_random_30, 80_random_31, 80_random_32
Case Name
Status
Exec Time
Memory
00_random_0
AC
26 ms
3832 KiB
00_random_1
AC
25 ms
3864 KiB
00_random_10
AC
213 ms
3832 KiB
00_random_11
AC
209 ms
3836 KiB
00_random_2
AC
26 ms
3864 KiB
00_random_3
AC
27 ms
3828 KiB
00_random_4
AC
28 ms
3848 KiB
00_random_5
AC
28 ms
3844 KiB
00_random_6
AC
214 ms
3836 KiB
00_random_7
AC
212 ms
3860 KiB
00_random_8
AC
215 ms
3836 KiB
00_random_9
AC
207 ms
3856 KiB
00_sample_0
AC
26 ms
3860 KiB
00_sample_1
AC
24 ms
3860 KiB
00_sample_2
AC
26 ms
3836 KiB
10_random_12
AC
27 ms
3992 KiB
10_random_13
AC
27 ms
3864 KiB
10_random_14
AC
29 ms
3868 KiB
10_random_15
AC
35 ms
3852 KiB
10_random_16
AC
35 ms
3840 KiB
10_random_17
AC
36 ms
3844 KiB
10_random_18
AC
35 ms
3860 KiB
10_random_19
AC
35 ms
3872 KiB
10_random_20
AC
35 ms
3868 KiB
10_random_21
AC
37 ms
3972 KiB
10_random_22
AC
36 ms
3968 KiB
10_random_23
AC
37 ms
3968 KiB
11_exact_0
AC
25 ms
3848 KiB
11_exact_1
AC
26 ms
3864 KiB
11_exact_10
AC
32 ms
4088 KiB
11_exact_11
AC
36 ms
4228 KiB
11_exact_2
AC
26 ms
3844 KiB
11_exact_3
AC
26 ms
3856 KiB
11_exact_4
AC
26 ms
3828 KiB
11_exact_5
AC
25 ms
3836 KiB
11_exact_6
AC
28 ms
3992 KiB
11_exact_7
AC
31 ms
3964 KiB
11_exact_8
AC
35 ms
4088 KiB
11_exact_9
AC
28 ms
3968 KiB
12_dup_0
AC
307 ms
11388 KiB
12_dup_1
AC
307 ms
11384 KiB
12_dup_2
AC
307 ms
11392 KiB
21_grid_0
TLE
4030 ms
4472 KiB
21_grid_1
AC
289 ms
9724 KiB
21_grid_10
AC
2957 ms
9716 KiB
21_grid_2
AC
470 ms
3968 KiB
21_grid_3
AC
825 ms
4352 KiB
21_grid_4
AC
1223 ms
4856 KiB
21_grid_5
AC
1627 ms
5752 KiB
21_grid_6
AC
2015 ms
6648 KiB
21_grid_7
AC
2371 ms
7552 KiB
21_grid_8
AC
2669 ms
8440 KiB
21_grid_9
AC
2866 ms
9788 KiB
22_radial_0
AC
331 ms
11396 KiB
22_radial_1
AC
356 ms
11372 KiB
22_radial_2
AC
337 ms
11384 KiB
22_radial_3
AC
356 ms
11396 KiB
80_random_24
AC
237 ms
3988 KiB
80_random_25
AC
237 ms
3956 KiB
80_random_26
AC
235 ms
3964 KiB
80_random_27
AC
216 ms
3864 KiB
80_random_28
AC
220 ms
3840 KiB
80_random_29
AC
221 ms
3836 KiB
80_random_30
AC
231 ms
3836 KiB
80_random_31
AC
231 ms
3800 KiB
80_random_32
AC
232 ms
3840 KiB