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