Submission #84520
Source Code Expand
#include<cstdio> #include<algorithm> #include<stack> #include<queue> #include<vector> #include<string> #include<string.h> #include<cstdlib> #include<ctime> #include<cmath> #include<map> #include<set> #include<bitset> #include<iostream> #include<sstream> #define fi first #define se second #define rep(i,n) for(int i = 0; i < n; i++) #define rrep(i,n) for(int i = 1; i <= n; i++) #define drep(i,n) for(int i = n-1; i >= 0; i--) #define each(it,c) for(__typeof((c).begin()) it=(c).begin();it!=(c).end();it++) #define rng(a) a.begin(),a.end() #define maxs(x,y) x = max(x,y); #define mins(x,y) x = min(x,y); #define pb push_back #define snuke srand((unsigned)time(NULL)) using namespace std; typedef long long int ll; typedef pair<int,int> P; const int MX = 100005, INF = 1000000000, mod = 1000000009; const ll LINF = 1000000000000000000ll; const double eps = 1e-9; const int dx[4] = {-1,0,1,0}, dy[4] = {0,-1,0,1}; //<^>v const double EPS = 10e-10; // 2次元ベクトル class Point { public: double x, y; Point() {} Point(double x, double y) : x(x), y(y) {} Point operator+(Point t) const { return Point(x + t.x, y + t.y); } Point operator-(Point t) const { return Point(x - t.x, y - t.y); } Point operator*(double t) const { return Point(x * t, y * t); } double dot(Point t) const { return x * t.x + y * t.y; } double cross(Point t) const { return x * t.y - y * t.x; } double normSq() const { return x * x + y * y; } double norm() const { return sqrt(normSq()); } int ccw(Point a, Point b) const { const Point& c = *this; if ((b - a).cross(c - a) > EPS) return +1; if ((b - a).cross(c - a) < -EPS) return -1; if ((b - a).dot(c - a) < EPS) return +2; if ((b - a).norm() < (c - a).norm()) return -2; /* otherwise */ return 0; // 上2つのif中の<を<=にすれば端点をexcludeできる } // thisが線分AB上にあるか bool isOnLine(Point a, Point b) const { return ccw(a, b) == 0; } // thisを中心にaをrad回転 Point rotate(Point from, double rad) { // | to.x | = | cos(rad) -sin(rad) | | from.x - x | + | x | // | to.y | | sin(rad) cos(rad) | | from.y - y | | y | return Point( cos(rad) * (from.x - x) - sin(rad) * (from.x - x) + x, sin(rad) * (from.x - x) + cos(rad) * (from.y - y) + y); } bool operator<(Point t) const { return x != t.x ? x < t.x : y < t.y; } bool operator==(Point t) const { return abs(x - t.x) <= EPS && abs(y - t.y) <= EPS; } }; typedef Point V; set<V> up, dw; typedef set<V>::iterator sit; void pri(){ each(it,up){ printf("(%.0f,%.0f) ",(*it).x,(*it).y); } puts(""); each(it,dw){ printf("(%.0f,%.0f) ",(*it).x,(*it).y); } puts(""); } int main(){ int n, x, y; char in[10]; scanf("%d",&n); rep(i,n){ scanf("%s%d%d",in,&x,&y); V v = V(x,y); //pri(); if(in[0] == 'M'){ sit uit = up.lower_bound(v); sit dit = dw.lower_bound(v); int flag = 0; if(uit == up.end() || uit == up.begin()){ uit = up.insert(v).fi; dit = dw.insert(v).fi; flag = 3; } else { V uv = (*uit); --uit; V uu = (*uit); V dv = (*dit); --dit; V du = (*dit); if(v.ccw(uu,uv) == +1){ uit = up.insert(v).fi; flag = 1; } if(v.ccw(du,dv) == -1){ dit = dw.insert(v).fi; flag = 2; } } if(flag&1){ sit it = up.find(v); if(it != up.begin()){ --it; while(it != up.begin()){ V uv = (*it); --it; V uu = (*it); if(uv.ccw(v,uu) != -1){ ++it; up.erase(it++); --it; } else break; } } it = up.find(v); ++it; if(it != up.end()){ while(1){ V uv = (*it); ++it; if(it == up.end()) break; V uu = (*it); if(uv.ccw(v,uu) != +1){ --it; up.erase(it++); } else break; } } } if(flag&2){ sit it = dw.find(v); if(it != dw.begin()){ --it; while(it != dw.begin()){ V uv = (*it); --it; V uu = (*it); if(uv.ccw(v,uu) != +1){ ++it; dw.erase(it++); --it; } else break; } } it = dw.find(v); ++it; if(it != dw.end()){ while(1){ V uv = (*it); ++it; if(it == dw.end()) break; V uu = (*it); if(uv.ccw(v,uu) != -1){ --it; dw.erase(it++); } else break; } } } } else { sit uit = up.lower_bound(v); sit dit = dw.lower_bound(v); if((*uit) == v || (*dit) == v){ puts("DANGER"); continue;} if(uit == up.end() || uit == up.begin()){ puts("SAFE"); continue; } V uv = (*uit); --uit; V uu = (*uit); V dv = (*dit); --dit; V du = (*dit); if(v.ccw(uu,uv) == +1 || v.ccw(du,dv) == -1){ //printf("(%.0f,%.0f)(%.0f,%.0f)(%.0f,%.0f) %d\n",v.x,v.y,uu.x,uu.y,uv.x,uv.y,v.ccw(uu,uv)); //printf("(%.0f,%.0f)(%.0f,%.0f)(%.0f,%.0f) %d\n",v.x,v.y,du.x,du.y,dv.x,dv.y,v.ccw(du,dv)); puts("SAFE"); continue; } puts("DANGER"); } } return 0; }
Submission Info
Submission Time | |
---|---|
Task | C - 泥棒 |
User | snuke |
Language | C++ (G++ 4.6.4) |
Score | 300 |
Code Size | 5211 Byte |
Status | AC |
Exec Time | 280 ms |
Memory | 7488 KB |
Compile Error
./Main.cpp: In function ‘int main()’: ./Main.cpp:117:16: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] ./Main.cpp:119:27: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
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 | 21 ms | 776 KB |
11_rand01.txt | AC | 25 ms | 748 KB |
11_rand02.txt | AC | 23 ms | 784 KB |
11_rand03.txt | AC | 21 ms | 780 KB |
11_rand04.txt | AC | 21 ms | 784 KB |
11_rand05.txt | AC | 22 ms | 784 KB |
11_rand06.txt | AC | 20 ms | 764 KB |
11_rand07.txt | AC | 22 ms | 780 KB |
11_rand08.txt | AC | 20 ms | 808 KB |
11_rand09.txt | AC | 20 ms | 772 KB |
11_rand10.txt | AC | 21 ms | 784 KB |
11_rand11.txt | AC | 20 ms | 784 KB |
11_rand12.txt | AC | 19 ms | 784 KB |
11_rand13.txt | AC | 19 ms | 776 KB |
11_rand14.txt | AC | 21 ms | 784 KB |
11_rand15.txt | AC | 20 ms | 784 KB |
11_rand16.txt | AC | 22 ms | 784 KB |
11_rand17.txt | AC | 22 ms | 780 KB |
11_rand18.txt | AC | 21 ms | 784 KB |
11_rand19.txt | AC | 21 ms | 772 KB |
11_rand20.txt | AC | 20 ms | 800 KB |
11_rand21.txt | AC | 21 ms | 736 KB |
11_rand22.txt | AC | 19 ms | 772 KB |
11_rand23.txt | AC | 20 ms | 780 KB |
11_rand24.txt | AC | 21 ms | 780 KB |
21_rand00.txt | AC | 21 ms | 784 KB |
21_rand01.txt | AC | 21 ms | 720 KB |
21_rand02.txt | AC | 21 ms | 816 KB |
21_rand03.txt | AC | 21 ms | 780 KB |
21_rand04.txt | AC | 20 ms | 784 KB |
21_rand05.txt | AC | 20 ms | 780 KB |
21_rand06.txt | AC | 20 ms | 780 KB |
21_rand07.txt | AC | 20 ms | 784 KB |
21_rand08.txt | AC | 19 ms | 780 KB |
21_rand09.txt | AC | 18 ms | 780 KB |
21_rand10.txt | AC | 21 ms | 776 KB |
21_rand11.txt | AC | 21 ms | 784 KB |
21_rand12.txt | AC | 20 ms | 780 KB |
21_rand13.txt | AC | 21 ms | 776 KB |
21_rand14.txt | AC | 21 ms | 784 KB |
21_rand15.txt | AC | 20 ms | 772 KB |
21_rand16.txt | AC | 21 ms | 780 KB |
21_rand17.txt | AC | 20 ms | 772 KB |
21_rand18.txt | AC | 19 ms | 780 KB |
21_rand19.txt | AC | 20 ms | 784 KB |
21_rand20.txt | AC | 20 ms | 776 KB |
21_rand21.txt | AC | 20 ms | 788 KB |
21_rand22.txt | AC | 20 ms | 780 KB |
21_rand23.txt | AC | 19 ms | 780 KB |
21_rand24.txt | AC | 21 ms | 776 KB |
31_rand00.txt | AC | 20 ms | 732 KB |
31_rand01.txt | AC | 21 ms | 776 KB |
31_rand02.txt | AC | 21 ms | 788 KB |
31_rand03.txt | AC | 22 ms | 776 KB |
31_rand04.txt | AC | 20 ms | 780 KB |
31_rand05.txt | AC | 21 ms | 788 KB |
31_rand06.txt | AC | 21 ms | 776 KB |
31_rand07.txt | AC | 20 ms | 784 KB |
31_rand08.txt | AC | 21 ms | 780 KB |
31_rand09.txt | AC | 22 ms | 780 KB |
31_rand10.txt | AC | 19 ms | 784 KB |
31_rand11.txt | AC | 21 ms | 780 KB |
31_rand12.txt | AC | 22 ms | 780 KB |
31_rand13.txt | AC | 30 ms | 784 KB |
31_rand14.txt | AC | 20 ms | 732 KB |
31_rand15.txt | AC | 19 ms | 776 KB |
31_rand16.txt | AC | 21 ms | 768 KB |
31_rand17.txt | AC | 20 ms | 776 KB |
31_rand18.txt | AC | 21 ms | 776 KB |
31_rand19.txt | AC | 21 ms | 784 KB |
31_rand20.txt | AC | 21 ms | 780 KB |
31_rand21.txt | AC | 20 ms | 792 KB |
31_rand22.txt | AC | 22 ms | 784 KB |
31_rand23.txt | AC | 19 ms | 784 KB |
31_rand24.txt | AC | 21 ms | 776 KB |
41_rand00.txt | AC | 115 ms | 1100 KB |
41_rand01.txt | AC | 70 ms | 960 KB |
41_rand02.txt | AC | 110 ms | 1208 KB |
41_rand03.txt | AC | 81 ms | 832 KB |
41_rand04.txt | AC | 86 ms | 964 KB |
41_rand05.txt | AC | 61 ms | 784 KB |
41_rand06.txt | AC | 22 ms | 776 KB |
41_rand07.txt | AC | 93 ms | 1080 KB |
41_rand08.txt | AC | 66 ms | 828 KB |
41_rand09.txt | AC | 86 ms | 1224 KB |
41_rand10.txt | AC | 126 ms | 1212 KB |
41_rand11.txt | AC | 114 ms | 1208 KB |
41_rand12.txt | AC | 88 ms | 1212 KB |
41_rand13.txt | AC | 96 ms | 1208 KB |
41_rand14.txt | AC | 65 ms | 1212 KB |
41_rand15.txt | AC | 50 ms | 956 KB |
41_rand16.txt | AC | 109 ms | 1080 KB |
41_rand17.txt | AC | 76 ms | 836 KB |
41_rand18.txt | AC | 21 ms | 780 KB |
41_rand19.txt | AC | 20 ms | 780 KB |
41_rand20.txt | AC | 21 ms | 736 KB |
41_rand21.txt | AC | 20 ms | 720 KB |
41_rand22.txt | AC | 21 ms | 776 KB |
41_rand23.txt | AC | 280 ms | 7352 KB |
41_rand24.txt | AC | 279 ms | 7488 KB |