Submission #667139


Source Code Expand

#include <cstdio>
#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <bitset>
#include <numeric>
#include <climits>
#include <cfloat>
#include <functional>
using namespace std;

class Point
{
public:
    int y, x;
    Point(){
        y = x = 0;
    }
    Point(int y0, int x0){
        y = y0;
        x = x0;
    }
    Point operator+(const Point& p) const{
        return Point(y + p.y, x + p.x);
    }
    Point operator-(const Point& p) const{
        return Point(y - p.y, x - p.x);
    }
    Point operator*(int a) const{
        return Point(y * a, x * a);
    }
    bool operator==(const Point& p) const{
        return y == p.y && x == p.x;
    }
    long long length2() const{
        return y * (long long)y + x * (long long)x;
    }
    long long dist2(const Point& p) const{
        return (y - p.y) * (long long)(y - p.y) + (x - p.x) * (long long)(x - p.x);
    }
    long long dot(const Point& p) const{
        return y * (long long)p.y + x * (long long)p.x; // |a|*|b|*cosθ
    }
    long long cross(const Point& p) const{
        return x * (long long)p.y - y * (long long)p.x; // |a|*|b|*sinθ
    }
};

class ConvexHull
{
private:
    class CompareLess{
    public:
        bool operator() (const Point& p1, const Point& p2) const{
            return make_pair(p1.x, p1.y) < make_pair(p2.x, p2.y);
        };
    };
    class CompareGreater{
    public:
        bool operator() (const Point& p1, const Point& p2) const{
            return make_pair(p1.x, p1.y) > make_pair(p2.x, p2.y);
        };
    };
    set<Point, CompareLess>    upperPolygon;
    set<Point, CompareGreater> lowerPolygon;

    template<class Compare>
    void add(const Point& p, set<Point, Compare>& polygon) const
    {
        if(polygon.empty()){
            polygon.insert(p);
            return;
        }
        if(isInside(p, polygon))
            return;

        Point a = *polygon.begin();
        Point b = *polygon.rbegin();
        if(min(a.x, b.x) < p.x && p.x < max(a.x, b.x) && (b - a).cross(p - a) < 0)
            return;

        if(p.x != a.x && p.x == b.x){
            if(Compare()(b, p))
                polygon.erase(--polygon.end());
            else
                return;
        }

        auto it = polygon.insert(p).first;
        for(;;){
            auto it3 = it;
            if(it3 == polygon.begin())
                break;
            -- it3;
            Point d = *it3;

            auto it2 = it3;
            if(it2 == polygon.begin())
                break;
            -- it2;
            Point c = *it2;

            if((d - p).cross(c - p) <= 0)
                polygon.erase(it3);
            else
                break;
        }
        for(;;){
            auto it2 = it;
            ++ it2;
            if(it2 == polygon.end())
                break;
            Point c = *it2;

            auto it3 = it2;
            ++ it3;
            if(it3 == polygon.end())
                break;
            Point d = *it3;

            if((d - p).cross(c - p) <= 0)
                polygon.erase(it2);
            else
                break;
        }
    }

    template<class Compare>
    bool isInside(const Point& p, const set<Point, Compare>& polygon) const
    {
        if(polygon.empty())
            return false;

        Point a = *polygon.begin();
        Point b = *polygon.rbegin();
        if((b - a).cross(p - a) < 0)
            return false;

        auto it2 = polygon.lower_bound(p);
        if(it2 == polygon.end())
            return false;
        Point d = *it2;
        if(it2 == polygon.begin())
            return d == p;

        auto it1 = it2;
        -- it1;
        Point c = *it1;

        return (d - c).cross(p - c) <= 0;
    }

public:
    void add(const Point& p)
    {
        add(p, upperPolygon);
        add(p, lowerPolygon);
    }
    bool isInside(const Point& p) const
    {
        return isInside(p, upperPolygon) || isInside(p, lowerPolygon);
    }
};

int main()
{
    int n;
    cin >> n;

    ConvexHull ch;
    for(int i=0; i<n; ++i){
        string s;
        Point p;
        cin >> s >> p.x >> p.y;

        if(s == "TARGET"){
            if(ch.isInside(p))
                cout << "DANGER" << endl;
            else
                cout << "SAFE" << endl;
        }
        else{
            ch.add(p);
        }
    }

    return 0;
}

Submission Info

Submission Time
Task C - 泥棒
User mamekin
Language C++11 (GCC 4.8.1)
Score 300
Code Size 4714 Byte
Status AC
Exec Time 1152 ms
Memory 5548 KB

Judge Result

Set Name Subtask1 Subtask2 Subtask3 Subtask4
Score / Max Score 50 / 50 50 / 50 50 / 50 150 / 150
Status
AC × 25
AC × 50
AC × 75
AC × 100
Set Name Test Cases
Subtask1 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt
Subtask2 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt, 21_rand00.txt, 21_rand01.txt, 21_rand02.txt, 21_rand03.txt, 21_rand04.txt, 21_rand05.txt, 21_rand06.txt, 21_rand07.txt, 21_rand08.txt, 21_rand09.txt, 21_rand10.txt, 21_rand11.txt, 21_rand12.txt, 21_rand13.txt, 21_rand14.txt, 21_rand15.txt, 21_rand16.txt, 21_rand17.txt, 21_rand18.txt, 21_rand19.txt, 21_rand20.txt, 21_rand21.txt, 21_rand22.txt, 21_rand23.txt, 21_rand24.txt
Subtask3 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt, 21_rand00.txt, 21_rand01.txt, 21_rand02.txt, 21_rand03.txt, 21_rand04.txt, 21_rand05.txt, 21_rand06.txt, 21_rand07.txt, 21_rand08.txt, 21_rand09.txt, 21_rand10.txt, 21_rand11.txt, 21_rand12.txt, 21_rand13.txt, 21_rand14.txt, 21_rand15.txt, 21_rand16.txt, 21_rand17.txt, 21_rand18.txt, 21_rand19.txt, 21_rand20.txt, 21_rand21.txt, 21_rand22.txt, 21_rand23.txt, 21_rand24.txt, 31_rand00.txt, 31_rand01.txt, 31_rand02.txt, 31_rand03.txt, 31_rand04.txt, 31_rand05.txt, 31_rand06.txt, 31_rand07.txt, 31_rand08.txt, 31_rand09.txt, 31_rand10.txt, 31_rand11.txt, 31_rand12.txt, 31_rand13.txt, 31_rand14.txt, 31_rand15.txt, 31_rand16.txt, 31_rand17.txt, 31_rand18.txt, 31_rand19.txt, 31_rand20.txt, 31_rand21.txt, 31_rand22.txt, 31_rand23.txt, 31_rand24.txt
Subtask4 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt, 21_rand00.txt, 21_rand01.txt, 21_rand02.txt, 21_rand03.txt, 21_rand04.txt, 21_rand05.txt, 21_rand06.txt, 21_rand07.txt, 21_rand08.txt, 21_rand09.txt, 21_rand10.txt, 21_rand11.txt, 21_rand12.txt, 21_rand13.txt, 21_rand14.txt, 21_rand15.txt, 21_rand16.txt, 21_rand17.txt, 21_rand18.txt, 21_rand19.txt, 21_rand20.txt, 21_rand21.txt, 21_rand22.txt, 21_rand23.txt, 21_rand24.txt, 31_rand00.txt, 31_rand01.txt, 31_rand02.txt, 31_rand03.txt, 31_rand04.txt, 31_rand05.txt, 31_rand06.txt, 31_rand07.txt, 31_rand08.txt, 31_rand09.txt, 31_rand10.txt, 31_rand11.txt, 31_rand12.txt, 31_rand13.txt, 31_rand14.txt, 31_rand15.txt, 31_rand16.txt, 31_rand17.txt, 31_rand18.txt, 31_rand19.txt, 31_rand20.txt, 31_rand21.txt, 31_rand22.txt, 31_rand23.txt, 31_rand24.txt, 41_rand00.txt, 41_rand01.txt, 41_rand02.txt, 41_rand03.txt, 41_rand04.txt, 41_rand05.txt, 41_rand06.txt, 41_rand07.txt, 41_rand08.txt, 41_rand09.txt, 41_rand10.txt, 41_rand11.txt, 41_rand12.txt, 41_rand13.txt, 41_rand14.txt, 41_rand15.txt, 41_rand16.txt, 41_rand17.txt, 41_rand18.txt, 41_rand19.txt, 41_rand20.txt, 41_rand21.txt, 41_rand22.txt, 41_rand23.txt, 41_rand24.txt
Case Name Status Exec Time Memory
11_rand00.txt AC 27 ms 816 KB
11_rand01.txt AC 26 ms 792 KB
11_rand02.txt AC 28 ms 800 KB
11_rand03.txt AC 28 ms 880 KB
11_rand04.txt AC 25 ms 876 KB
11_rand05.txt AC 25 ms 924 KB
11_rand06.txt AC 27 ms 924 KB
11_rand07.txt AC 27 ms 796 KB
11_rand08.txt AC 25 ms 920 KB
11_rand09.txt AC 31 ms 872 KB
11_rand10.txt AC 27 ms 800 KB
11_rand11.txt AC 27 ms 844 KB
11_rand12.txt AC 25 ms 920 KB
11_rand13.txt AC 26 ms 796 KB
11_rand14.txt AC 25 ms 872 KB
11_rand15.txt AC 25 ms 796 KB
11_rand16.txt AC 24 ms 864 KB
11_rand17.txt AC 26 ms 920 KB
11_rand18.txt AC 25 ms 924 KB
11_rand19.txt AC 27 ms 928 KB
11_rand20.txt AC 24 ms 880 KB
11_rand21.txt AC 24 ms 800 KB
11_rand22.txt AC 26 ms 864 KB
11_rand23.txt AC 26 ms 916 KB
11_rand24.txt AC 24 ms 796 KB
21_rand00.txt AC 27 ms 920 KB
21_rand01.txt AC 26 ms 920 KB
21_rand02.txt AC 25 ms 796 KB
21_rand03.txt AC 28 ms 880 KB
21_rand04.txt AC 26 ms 884 KB
21_rand05.txt AC 27 ms 868 KB
21_rand06.txt AC 29 ms 800 KB
21_rand07.txt AC 28 ms 800 KB
21_rand08.txt AC 28 ms 880 KB
21_rand09.txt AC 26 ms 928 KB
21_rand10.txt AC 28 ms 924 KB
21_rand11.txt AC 25 ms 804 KB
21_rand12.txt AC 23 ms 924 KB
21_rand13.txt AC 30 ms 804 KB
21_rand14.txt AC 28 ms 924 KB
21_rand15.txt AC 29 ms 740 KB
21_rand16.txt AC 26 ms 752 KB
21_rand17.txt AC 28 ms 800 KB
21_rand18.txt AC 26 ms 760 KB
21_rand19.txt AC 28 ms 744 KB
21_rand20.txt AC 29 ms 776 KB
21_rand21.txt AC 28 ms 872 KB
21_rand22.txt AC 28 ms 928 KB
21_rand23.txt AC 25 ms 924 KB
21_rand24.txt AC 28 ms 920 KB
31_rand00.txt AC 30 ms 924 KB
31_rand01.txt AC 32 ms 876 KB
31_rand02.txt AC 37 ms 800 KB
31_rand03.txt AC 32 ms 924 KB
31_rand04.txt AC 31 ms 864 KB
31_rand05.txt AC 35 ms 920 KB
31_rand06.txt AC 33 ms 748 KB
31_rand07.txt AC 31 ms 744 KB
31_rand08.txt AC 37 ms 924 KB
31_rand09.txt AC 36 ms 920 KB
31_rand10.txt AC 28 ms 812 KB
31_rand11.txt AC 38 ms 924 KB
31_rand12.txt AC 33 ms 808 KB
31_rand13.txt AC 36 ms 812 KB
31_rand14.txt AC 26 ms 924 KB
31_rand15.txt AC 34 ms 928 KB
31_rand16.txt AC 34 ms 880 KB
31_rand17.txt AC 30 ms 844 KB
31_rand18.txt AC 35 ms 920 KB
31_rand19.txt AC 33 ms 844 KB
31_rand20.txt AC 30 ms 836 KB
31_rand21.txt AC 29 ms 880 KB
31_rand22.txt AC 33 ms 836 KB
31_rand23.txt AC 33 ms 868 KB
31_rand24.txt AC 32 ms 744 KB
41_rand00.txt AC 742 ms 920 KB
41_rand01.txt AC 393 ms 920 KB
41_rand02.txt AC 727 ms 876 KB
41_rand03.txt AC 429 ms 928 KB
41_rand04.txt AC 510 ms 836 KB
41_rand05.txt AC 235 ms 924 KB
41_rand06.txt AC 44 ms 876 KB
41_rand07.txt AC 642 ms 928 KB
41_rand08.txt AC 337 ms 920 KB
41_rand09.txt AC 592 ms 928 KB
41_rand10.txt AC 805 ms 872 KB
41_rand11.txt AC 735 ms 872 KB
41_rand12.txt AC 641 ms 868 KB
41_rand13.txt AC 695 ms 928 KB
41_rand14.txt AC 520 ms 812 KB
41_rand15.txt AC 326 ms 800 KB
41_rand16.txt AC 708 ms 796 KB
41_rand17.txt AC 422 ms 924 KB
41_rand18.txt AC 28 ms 912 KB
41_rand19.txt AC 30 ms 916 KB
41_rand20.txt AC 29 ms 836 KB
41_rand21.txt AC 28 ms 844 KB
41_rand22.txt AC 29 ms 752 KB
41_rand23.txt AC 1111 ms 5548 KB
41_rand24.txt AC 1152 ms 5480 KB