# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
130447 | 2019-07-15T08:23:39 Z | 이온조(#3149) | Fence (CEOI08_fence) | C++14 | 93 ms | 380 KB |
#include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; #define X first #define Y second #define sz(V) ((int)V.size()) int CCW(pii A, pii B, pii C) { int tmp = A.X*B.Y + B.X*C.Y + C.X*A.Y - A.Y*B.X - B.Y*C.X - C.Y*A.X; if(tmp < 0) return -1; if(tmp > 0) return +1; } int N, M; pii H[111], T[111]; bool O[111]; int get() { int c = 0; for(int i=1; i<=N; i++) if(O[i]) ++c; if(c < 3) return 1e9; vector<pii> S, C; int mn = 1e9, st = -1; for(int i=1; i<=N; i++) if(O[i] && mn > H[i].X) mn = H[i].X, st = i; for(int i=1; i<=N; i++) if(O[i] && st != i) S.push_back(H[i]); sort(S.begin(), S.end(), [&](pii PP, pii QQ) { return CCW(H[st], PP, QQ) == -1; }); C.push_back(H[st]); for(auto& it: S) { while(sz(C) >= 2 && CCW(C[sz(C) - 2], C[sz(C) - 1], it) == +1) C.pop_back(); C.push_back(it); } // puts("Hull:"); // for(int i=0; i<sz(C); i++) printf("%d %d\n", C[i].X, C[i].Y); // puts("---------------------"); int cnt = 0; for(int i=1; i<=M; i++) { bool f = 1; for(int j=0; j<sz(C); j++) { pii a = C[j], b = C[(j+1) % sz(C)]; if(CCW(a, b, T[i]) == +1) f = 0; } if(f) ++cnt; } return 111 * (M - cnt) + 20 * sz(C); } int main() { srand(12345); scanf("%d%d",&N,&M); for(int i=1; i<=N; i++) scanf("%d%d", &H[i].X, &H[i].Y); for(int i=1; i<=M; i++) scanf("%d%d", &T[i].X, &T[i].Y); int ans = 111 * M; O[1] = O[2] = O[3] = 1; for(int i=1; i<=200; i++) { int mn = 1e9, mni = -1; for(int j=1; j<=50; j++) { int k = rand() % N + 1; O[k] ^= 1; int tmp = get(); if(mn > tmp) mn = tmp, mni = k; O[k] ^= 1; } if(mni != -1) O[mni] ^= 1; ans = min(ans, get()); // printf("val: %d\n", get()); // for(int j=1; j<=N; j++) printf("%d", O[j]); // puts(""); } printf("%d", ans); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 21 ms | 348 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 55 ms | 376 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 23 ms | 256 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 38 ms | 360 KB | Output isn't correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 19 ms | 256 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 32 ms | 256 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 46 ms | 256 KB | Output is correct |
2 | Correct | 37 ms | 296 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 61 ms | 256 KB | Output is correct |
2 | Correct | 35 ms | 380 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 81 ms | 376 KB | Output is correct |
2 | Correct | 35 ms | 376 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 93 ms | 376 KB | Output is correct |
2 | Correct | 35 ms | 376 KB | Output is correct |