# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
83571 | 2018-11-09T11:38:24 Z | faceless | The Forest of Fangorn (CEOI14_fangorn) | C++14 | 3000 ms | 16804 KB |
#include <bits/stdc++.h> #define MP make_pair #define F first #define PB push_back #define S second using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> pii; const int mod = (int)1e9 + 7; const int maxn = 1e4 + 4; const ll inf = 1e18; const pair <int, int> Oxy = {0, 0}; pii operator + (pii fi, pii se) { return {fi.F + se.F, fi.S + se.S}; } pii operator - (pii fi, pii se) { return {fi.F - se.F, fi.S - se.S}; } ll operator * (pii fi, pii se) { return 1ll * fi.F * se.S - 1ll * fi.S * se.F; } int n; pii p[maxn], c[maxn]; vector <int> v[maxn]; inline bool isright (pii A, pii B, pii C) { pii AB = B - A; pii AC = C - A; return (AB * AC) < 0; } int district (pii pnt, int x) { int lo = 0, hi = n - 1; pii A = p[x]; pii B = p[v[x][0]]; while (hi - lo > 1) { int mid = (hi + lo) >> 1; pii C = p[v[x][mid]]; if (isright (B, A, B + A - C)) { if (isright (B, A, pnt) and !isright (C, A, pnt)) hi = mid; else lo = mid; } else { if (isright (B, A, pnt) or !isright (C, A, pnt)) hi = mid; else lo = mid; } } return hi; } inline int nahiye (pii vec) { if (vec.F >= 0 and vec.S <= 0) return 4; if (vec.F >= 0 and vec.S >= 0) return 1; if (vec.F <= 0 and vec.S <= 0) return 3; return 2; } bool cmp (int fi, int se) { int x = nahiye (p[fi]), y = nahiye (p[se]); if (x != y) return x > y; return isright (Oxy, p[fi], p[se]); } int d[maxn]; int main (){ int w, h; scanf ("%d%d", &w, &h); pii s; scanf ("%d%d", &s.F, &s.S); int number_of_camps; scanf ("%d", &number_of_camps); for (int i = 0; i < number_of_camps; i++) scanf ("%d%d", &c[i].F, &c[i].S); scanf ("%d", &n); for (int i = 0; i < n; i++) v[i].reserve (n - 1); for (int i = 0; i < n; i++) scanf ("%d%d", &p[i].F, &p[i].S); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i == j) continue; v[i].PB (j); p[j] = p[i] - p[j]; } sort (v[i].begin(), v[i].end(), cmp); for (int j = 0; j < n; j++) { if (i == j) continue; p[j] = p[j] - p[i]; p[j] = Oxy - p[j]; } } for (int i = 0; i < n; i++) d[i] = district (s, i); vector <int> ans; for (int i = 0; i < number_of_camps; i++) { bool found = 0; for (int j = 0; j < n; j++) { if (district (c[i], j) != d[j]) { found = 1; break; } } if (!found) ans.PB (i + 1); } int k = ans.size(); printf ("%d\n", k); for (auto it : ans) printf ("%d ", it); }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 632 KB | Output is correct |
2 | Correct | 2 ms | 764 KB | Output is correct |
3 | Correct | 2 ms | 784 KB | Output is correct |
4 | Correct | 3 ms | 784 KB | Output is correct |
5 | Correct | 3 ms | 784 KB | Output is correct |
6 | Correct | 2 ms | 888 KB | Output is correct |
7 | Correct | 3 ms | 888 KB | Output is correct |
8 | Correct | 2 ms | 888 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 888 KB | Output is correct |
2 | Correct | 2 ms | 888 KB | Output is correct |
3 | Correct | 3 ms | 888 KB | Output is correct |
4 | Correct | 3 ms | 888 KB | Output is correct |
5 | Correct | 3 ms | 888 KB | Output is correct |
6 | Correct | 4 ms | 888 KB | Output is correct |
7 | Correct | 2 ms | 888 KB | Output is correct |
8 | Correct | 2 ms | 888 KB | Output is correct |
9 | Correct | 3 ms | 888 KB | Output is correct |
10 | Correct | 6 ms | 888 KB | Output is correct |
11 | Correct | 6 ms | 1008 KB | Output is correct |
12 | Correct | 6 ms | 1008 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 1008 KB | Output is correct |
2 | Correct | 2 ms | 1008 KB | Output is correct |
3 | Correct | 2 ms | 1008 KB | Output is correct |
4 | Correct | 146 ms | 4732 KB | Output is correct |
5 | Correct | 28 ms | 4732 KB | Output is correct |
6 | Correct | 558 ms | 16448 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1182 ms | 16688 KB | Output is correct |
2 | Execution timed out | 3053 ms | 16804 KB | Time limit exceeded |
3 | Halted | 0 ms | 0 KB | - |