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 |
|
|
|
|
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 |