結果
問題 | No.199 星を描こう |
ユーザー | kyuridenamida |
提出日時 | 2015-04-29 00:13:45 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 3,101 bytes |
コンパイル時間 | 1,841 ms |
コンパイル使用メモリ | 176,280 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-06-09 13:46:03 |
合計ジャッジ時間 | 2,191 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,816 KB |
testcase_01 | AC | 2 ms
6,812 KB |
testcase_02 | AC | 2 ms
6,944 KB |
testcase_03 | AC | 1 ms
6,944 KB |
testcase_04 | AC | 2 ms
6,944 KB |
testcase_05 | AC | 2 ms
6,940 KB |
testcase_06 | AC | 2 ms
6,940 KB |
testcase_07 | AC | 2 ms
6,944 KB |
testcase_08 | AC | 3 ms
6,940 KB |
testcase_09 | AC | 2 ms
6,940 KB |
testcase_10 | AC | 3 ms
6,940 KB |
testcase_11 | AC | 2 ms
6,944 KB |
testcase_12 | AC | 1 ms
6,940 KB |
testcase_13 | AC | 2 ms
6,940 KB |
testcase_14 | AC | 1 ms
6,940 KB |
testcase_15 | AC | 2 ms
6,944 KB |
testcase_16 | AC | 2 ms
6,940 KB |
testcase_17 | AC | 3 ms
6,940 KB |
testcase_18 | AC | 2 ms
6,944 KB |
testcase_19 | AC | 3 ms
6,944 KB |
testcase_20 | AC | 1 ms
6,940 KB |
testcase_21 | AC | 3 ms
6,944 KB |
testcase_22 | AC | 1 ms
6,944 KB |
testcase_23 | AC | 1 ms
6,940 KB |
testcase_24 | AC | 2 ms
6,940 KB |
testcase_25 | AC | 2 ms
6,940 KB |
testcase_26 | AC | 1 ms
6,940 KB |
testcase_27 | AC | 2 ms
6,944 KB |
ソースコード
#include <bits/stdc++.h> #include <sys/time.h> using namespace std; #define rep(i,n) for(int (i) = 0 ; (i) < (int)(n) ; (i)++) typedef complex<double> P; typedef vector<P> G; double EPS = 1e-9; struct L : public vector<P> { L(const P &a, const P &b) { push_back(a); push_back(b); } }; namespace std {bool operator < (const P& a, const P& b) {return real(a) != real(b) ? real(a) < real(b) : imag(a) < imag(b);} } string itos(int n){ stringstream ss; ss << n; return ss.str(); } inline double cross(const P& a, const P& b) { return imag(conj(a)*b); } inline double dot(const P& a, const P& b) { return real(conj(a)*b); } inline int ccw(P a, P b, P c) { b -= a; c -= a; if (cross(b, c) > 0) return +1; // counter clockwise if (cross(b, c) < 0) return -1; // clockwise if (dot(b, c) < 0) return +2; // c--a--b on line if (norm(b) < norm(c)) return -2; // a--b--c on line return 0; } #define curr(P, i) P[i] #define next(P, i) P[(i+1)%P.size()] inline bool intersectSP(const L &s, const P &p) {return abs(s[0]-p)+abs(s[1]-p)-abs(s[1]-s[0]) < 1e-9;} P projection(const L &l, const P &p) {double t = dot(p-l[0], l[0]-l[1]) / norm(l[0]-l[1]);return l[0] + t*(l[0]-l[1]);} inline bool intersectSS(const L &s, const L &t) { //return Edge(s[0],s[1]).intersect(Edge(t[0],t[1])); return ccw(s[0],s[1],t[0])*ccw(s[0],s[1],t[1]) <= 0 && ccw(t[0],t[1],s[0])*ccw(t[0],t[1],s[1]) <= 0; } inline double distanceSP(const L &s, const P &p) { const P r = projection(s, p); if (intersectSP(s, r)) return abs(r - p); return min(abs(s[0] - p), abs(s[1] - p)); } inline double area2(const G& P) { double A = 0; for (int i = 0; i < P.size(); ++i)A += cross(curr(P, i), next(P, i)); return abs(A); } inline double distanceSS(const L &s, const L &t) { if (intersectSS(s, t)) return 0; return min(min(distanceSP(s, t[0]), distanceSP(s, t[1])),min(distanceSP(t, s[0]), distanceSP(t, s[1]))); } P crosspoint(const L &l, const L &m) { double A = cross(l[1] - l[0], m[1] - m[0]); double B = cross(l[1] - l[0], l[1] - m[0]); if (abs(A) < EPS && abs(B) < EPS) return m[0]; return m[0] + B / A * (m[1] - m[0]); } int main(){ vector<P> p(5); for(int i = 0 ; i < 5 ; i++){ double x,y; cin >> x >> y; p[i] = P(x,y); } sort(p.begin(),p.end()); do{ int fail = false; for(int i = 0 ; i < p.size() ; i++){ L l1 = L(curr(p,i),next(p,i)); int ok = 0; for(int j = 0 ; j < p.size() ; j++){ L l2 = L(curr(p,j),next(p,j)); set<P> s; s.insert(l1[0]); s.insert(l1[1]); s.insert(l2[0]); s.insert(l2[1]); if( s.size() == 4 ){ if( intersectSS(l1,l2) ){ P cp = crosspoint(l1,l2); double mini = 1e9; mini = min(abs(cp-l1[0]),mini); mini = min(abs(cp-l1[1]),mini); mini = min(abs(cp-l2[0]),mini); mini = min(abs(cp-l2[1]),mini); if( mini > EPS ){ ok++; } } } } if( ok != 2 ){ fail = true; } } if(!fail) { cout << "YES" << endl; return 0; } }while( next_permutation(p.begin(),p.end()) ); cout << "NO" << endl; }