#include #include using namespace std; #define x first #define y second typedef pair POINT2D; POINT2D v[12],vec[12]; int inline crossprod2D(const POINT2D &p1, const POINT2D &p2, const POINT2D &p3) { return (p2.x - p1.x)*(p3.y - p1.y) - (p2.y - p1.y)*(p3.x - p1.x); } int inline dotprod2D(const POINT2D &p1, const POINT2D &p2, const POINT2D &p3) { return (p2.x - p1.x)*(p3.x - p2.x) + (p2.y - p1.y)*(p3.y - p2.y); } bool compare(const POINT2D &p1, const POINT2D &p2) { if (crossprod2D(v[1], p1, p2) > 0) return 1; else return 0; } int main() { int q; cin >> q; for (int j = 1;j <= q;++j) { int el, nr = 0; int N; cin >> N; for (int i = 1;i <= N;++i) cin >> v[i].x >> v[i].y; if (N <= 2) { cout << "YES\n"; continue; } else if (N == 3) { if (dotprod2D(v[1], v[2], v[3]) == 0 || dotprod2D(v[1], v[3], v[2]) == 0 || dotprod2D(v[2], v[1], v[3]) == 0 || dotprod2D(v[2], v[3], v[1]) == 0 || dotprod2D(v[3], v[1], v[2]) == 0 || dotprod2D(v[3], v[2], v[1]) == 0 || crossprod2D(v[1], v[2], v[3]) == 0 || crossprod2D(v[1], v[3], v[2]) == 0 || crossprod2D(v[2], v[1], v[3]) == 0 || crossprod2D(v[2], v[3], v[1]) == 0 || crossprod2D(v[3], v[1], v[2]) == 0 || crossprod2D(v[3], v[2], v[1]) == 0) cout << "YES\n"; else cout << "NO\n"; continue; } int y_min = v[1].y; el = 1; for (int i = 2;i <= N;++i) if (v[i].y < y_min) { el = i; y_min = v[i].y; } swap(v[el], v[1]); sort(v + 2, v + N + 1, compare); vec[++nr] = v[1]; vec[++nr] = v[2]; int c = 0,i; for (i = 3;i <= N;++i) { if (crossprod2D(vec[nr - 1], vec[nr], v[i]) < 0) { cout << "NO\n"; break; } else if (crossprod2D(vec[nr - 1], vec[nr], v[i]) > 0 && dotprod2D(vec[nr - 1], vec[nr], v[i]) != 0) { cout << "NO\n"; break; } else if (crossprod2D(vec[nr - 1], vec[nr], v[i]) > 0 && dotprod2D(vec[nr - 1], vec[nr], v[i]) == 0) ++c; vec[++nr] = v[i]; } if (i>N) cout << "YES\n"; } return 0; }