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
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
AC × 15
AC × 65
TLE × 1
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