Submission #2695297


Source Code Expand

#include <bits/stdc++.h>

using namespace std;
using uint = unsigned int;
using ll = long long;
using ull = unsigned long long;
constexpr ll TEN(int n) { return (n==0) ? 1 : 10*TEN(n-1); }
template<class T> using V = vector<T>;
template<class T> using VV = V<V<T>>;

using D = long long;
const D EPS = 0;
int sgn(D a) { return (abs(a) <= EPS) ? 0 : (a < 0 ? -1 : 1); }
int sgn(D a, D b) { return sgn(a-b); }

struct Pt2 {
    D x, y;
    Pt2() {}
    Pt2(D _x, D _y) : x(_x), y(_y) {}
    Pt2 operator+(const Pt2 &r) const { return Pt2(x+r.x, y+r.y); }
    Pt2 operator-(const Pt2 &r) const { return Pt2(x-r.x, y-r.y); }

    Pt2 operator-() const { return Pt2(-x, -y); }
    
    bool operator<(const Pt2 &r) const { return 2*sgn(x, r.x)+sgn(y, r.y)<0; }
    bool operator==(const Pt2 &r) const { return sgn((*this-r).rabs()) == 0; }
    
    D rabs() const { return max(std::abs(x), std::abs(y)); }
};
ostream& operator<<(ostream& os, const Pt2 &p) {
    return os << "P(" << p.x << ", " << p.y << ")";
}
using P = Pt2;
using Pol = V<P>;

D cross(P a, P b) { return a.x*b.y - a.y*b.x; }
D dot(P a, P b) { return a.x*b.x + a.y*b.y; }

int ccw(P b, P c) {
    int s = sgn(cross(b, c));
    if (s) return s;
    if (!sgn(c.rabs()) || !sgn((c-b).rabs())) return 0;
    if (dot(b, c) < 0) return 2;
    if (dot(-b, c-b) < 0) return -2;
    return 0;
}
int ccw(P a, P b, P c) { return ccw(b-a, c-a); }


struct Convex {
    set<P> pol;
    bool cng(P p) {
        if (pol.size() == 0) return true;
        auto fi = *pol.begin(), ed = *pol.rbegin();
        if (p < fi || ed < p) return true;
        if (p == fi || p == ed) return false;
        auto it = pol.lower_bound(p);
        assert(it != pol.begin());
        auto ri = *it; it--;
        auto le = *it;
        if (ccw(le, ri, p) != 1) return false;
        return true;
    }
    bool lenorm(P p) {
        auto it = pol.lower_bound(p);
        if (it == pol.begin()) return false;
        it--;
        auto ri = *it;
        if (it == pol.begin()) return false;
        it--;
        auto le = *it;
        if (ccw(le, ri, p) == -1) return false;
        pol.erase(ri);
        return true;
    }
    bool rinorm(P p) {
        auto it = pol.lower_bound(p);
        if (it == pol.end()) return false;
        auto le = *it;
        it++;
        if (it == pol.end()) return false;
        auto ri = *it;
        it++;
        if (ccw(p, le, ri) == -1) return false;
        pol.erase(le);
        return true;
    }
    void ins(P p) {
        if (!cng(p)) return;
        while (lenorm(p)) {}
        while (rinorm(p)) {}
        pol.insert(p);
    }
};


int main(void) {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout << setprecision(20) << fixed;

    Convex up, dw;
    int n;
    cin >> n;

    for (int i = 0; i < n; i++) {
        string s;
        D x, y;
        cin >> s >> x >> y;
        P p = P(x, y);
        if (s == "TARGET") {
            bool f1 = up.cng(p);
            bool f2 = dw.cng(-p);
//            cout << f1 << " " << f2 << " " << up.pol.size() << " " << dw.pol.size() << endl;
            if (!f1 && !f2) cout << "DANGER" << endl;
            else cout << "SAFE" << endl;
        } else {
            up.ins(p);
            dw.ins(-p);
        }
    }
    return 0;
}

Submission Info

Submission Time
Task C - 泥棒
User yosupo
Language C++14 (GCC 5.4.1)
Score 300
Code Size 3392 Byte
Status AC
Exec Time 405 ms
Memory 7040 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 1 ms 256 KB
11_rand01.txt AC 1 ms 256 KB
11_rand02.txt AC 1 ms 256 KB
11_rand03.txt AC 1 ms 256 KB
11_rand04.txt AC 1 ms 256 KB
11_rand05.txt AC 1 ms 256 KB
11_rand06.txt AC 1 ms 256 KB
11_rand07.txt AC 1 ms 256 KB
11_rand08.txt AC 1 ms 256 KB
11_rand09.txt AC 1 ms 256 KB
11_rand10.txt AC 1 ms 256 KB
11_rand11.txt AC 1 ms 256 KB
11_rand12.txt AC 1 ms 256 KB
11_rand13.txt AC 1 ms 256 KB
11_rand14.txt AC 1 ms 256 KB
11_rand15.txt AC 1 ms 256 KB
11_rand16.txt AC 1 ms 256 KB
11_rand17.txt AC 1 ms 256 KB
11_rand18.txt AC 1 ms 256 KB
11_rand19.txt AC 1 ms 256 KB
11_rand20.txt AC 1 ms 256 KB
11_rand21.txt AC 1 ms 256 KB
11_rand22.txt AC 1 ms 256 KB
11_rand23.txt AC 1 ms 256 KB
11_rand24.txt AC 1 ms 256 KB
21_rand00.txt AC 2 ms 256 KB
21_rand01.txt AC 1 ms 256 KB
21_rand02.txt AC 1 ms 256 KB
21_rand03.txt AC 1 ms 256 KB
21_rand04.txt AC 1 ms 256 KB
21_rand05.txt AC 1 ms 256 KB
21_rand06.txt AC 1 ms 256 KB
21_rand07.txt AC 1 ms 256 KB
21_rand08.txt AC 1 ms 256 KB
21_rand09.txt AC 1 ms 256 KB
21_rand10.txt AC 1 ms 256 KB
21_rand11.txt AC 1 ms 256 KB
21_rand12.txt AC 1 ms 256 KB
21_rand13.txt AC 1 ms 256 KB
21_rand14.txt AC 1 ms 256 KB
21_rand15.txt AC 1 ms 256 KB
21_rand16.txt AC 1 ms 256 KB
21_rand17.txt AC 1 ms 256 KB
21_rand18.txt AC 1 ms 256 KB
21_rand19.txt AC 1 ms 256 KB
21_rand20.txt AC 1 ms 256 KB
21_rand21.txt AC 1 ms 256 KB
21_rand22.txt AC 1 ms 256 KB
21_rand23.txt AC 1 ms 256 KB
21_rand24.txt AC 1 ms 256 KB
31_rand00.txt AC 2 ms 256 KB
31_rand01.txt AC 3 ms 256 KB
31_rand02.txt AC 3 ms 256 KB
31_rand03.txt AC 3 ms 256 KB
31_rand04.txt AC 2 ms 256 KB
31_rand05.txt AC 4 ms 256 KB
31_rand06.txt AC 3 ms 256 KB
31_rand07.txt AC 2 ms 256 KB
31_rand08.txt AC 4 ms 256 KB
31_rand09.txt AC 4 ms 256 KB
31_rand10.txt AC 2 ms 256 KB
31_rand11.txt AC 3 ms 256 KB
31_rand12.txt AC 3 ms 256 KB
31_rand13.txt AC 4 ms 256 KB
31_rand14.txt AC 1 ms 256 KB
31_rand15.txt AC 3 ms 256 KB
31_rand16.txt AC 3 ms 256 KB
31_rand17.txt AC 2 ms 256 KB
31_rand18.txt AC 3 ms 256 KB
31_rand19.txt AC 2 ms 256 KB
31_rand20.txt AC 2 ms 256 KB
31_rand21.txt AC 2 ms 256 KB
31_rand22.txt AC 3 ms 256 KB
31_rand23.txt AC 3 ms 256 KB
31_rand24.txt AC 3 ms 256 KB
41_rand00.txt AC 200 ms 768 KB
41_rand01.txt AC 117 ms 512 KB
41_rand02.txt AC 234 ms 896 KB
41_rand03.txt AC 116 ms 512 KB
41_rand04.txt AC 141 ms 640 KB
41_rand05.txt AC 42 ms 256 KB
41_rand06.txt AC 5 ms 256 KB
41_rand07.txt AC 190 ms 768 KB
41_rand08.txt AC 87 ms 384 KB
41_rand09.txt AC 188 ms 768 KB
41_rand10.txt AC 248 ms 768 KB
41_rand11.txt AC 218 ms 768 KB
41_rand12.txt AC 202 ms 768 KB
41_rand13.txt AC 215 ms 768 KB
41_rand14.txt AC 177 ms 768 KB
41_rand15.txt AC 104 ms 512 KB
41_rand16.txt AC 196 ms 640 KB
41_rand17.txt AC 107 ms 512 KB
41_rand18.txt AC 2 ms 256 KB
41_rand19.txt AC 2 ms 256 KB
41_rand20.txt AC 2 ms 256 KB
41_rand21.txt AC 2 ms 256 KB
41_rand22.txt AC 2 ms 256 KB
41_rand23.txt AC 394 ms 7040 KB
41_rand24.txt AC 405 ms 7040 KB