Advertisement
cosenza987

dsasdas

Mar 22nd, 2022
848
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.99 KB | None | 0 0
  1. //Слава Україні, Героям слава 🇺🇦
  2.  
  3. #include <bits/stdc++.h>
  4.  
  5. using namespace std;
  6.  
  7. #define st first
  8. #define nd second
  9. #define pb push_back
  10. #define cl(x,v) memset((x), (v), sizeof(x))
  11. #define db(x) cerr << #x << " == " << x << endl
  12. #define dbs(x) cerr << x << endl
  13. #define _ << ", " <<
  14.  
  15. typedef long long ll;
  16. typedef long double ld;
  17. typedef pair<int, int> pii;
  18. typedef pair<int, pii> piii;
  19. typedef pair<ll, ll> pll;
  20. typedef pair<ll, pll> plll;
  21. typedef vector<int> vi;
  22. typedef vector <vi> vii;
  23.  
  24. const ld EPS = 1e-9, PI = acos(-1.);
  25. const ll LINF = 0x3f3f3f3f3f3f3f3f;
  26. const int INF = 0x3f3f3f3f, MOD = 1e9 + 7;
  27. const int N = 1e5 + 5;
  28.  
  29. typedef long double type;
  30. //for big coordinates change to long long
  31.  
  32. bool ge(type x, type y) { return x + EPS > y; }
  33. bool le(type x, type y) { return x - EPS < y; }
  34. bool eq(type x, type y) { return ge(x, y) and le(x, y); }
  35.  
  36. struct point {
  37.     type x, y;
  38.  
  39.     point() : x(0), y(0) {}
  40.     point(type x, type y) : x(x), y(y) {}
  41.  
  42.     point operator -() { return point(-x, -y); }
  43.     point operator +(point p) { return point(x + p.x, y + p.y); }
  44.     point operator -(point p) { return point(x - p.x, y - p.y); }
  45.  
  46.     point operator *(type k) { return point(k * x, k * y); }
  47.     point operator /(type k) { return point(x / k, y / k); }
  48.  
  49.     //inner product
  50.     type operator *(point p) { return x * p.x + y * p.y; }
  51.     //cross product
  52.     type operator %(point p) { return x * p.y - y * p.x; }
  53.  
  54.     bool operator ==(const point& p) const { return x == p.x and y == p.y; }
  55.     bool operator !=(const point& p) const { return x != p.x or y != p.y; }
  56.     bool operator <(const point& p) const { return (x < p.x) or (x == p.x and y < p.y); }
  57.  
  58.     // 0 => same direction
  59.     // 1 => p is on the left
  60.     //-1 => p is on the right    
  61.     int dir(point o, point p) {
  62.         type x = (*this - o) % (p - o);
  63.         return ge(x, 0) - le(x, 0);
  64.     }
  65.  
  66.     bool on_seg(point p, point q) {
  67.         if (this->dir(p, q)) return 0;
  68.         return ge(x, min(p.x, q.x)) and le(x, max(p.x, q.x)) and ge(y, min(p.y, q.y)) and le(y, max(p.y, q.y));
  69.     }
  70.  
  71.     ld abs() { return sqrt(x * x + y * y); }
  72.     type abs2() { return x * x + y * y; }
  73.     ld dist(point q) { return (*this - q).abs(); }
  74.     type dist2(point q) { return (*this - q).abs2(); }
  75.  
  76.     ld arg() { return atan2l(y, x); }
  77.  
  78.     // Project point on vector y
  79.     point project(point y) { return y * ((*this * y) / (y * y)); }
  80.  
  81.     // Project point on line generated by points x and y
  82.     point project(point x, point y) { return x + (*this - x).project(y - x); }
  83.  
  84.     ld dist_line(point x, point y) { return dist(project(x, y)); }
  85.  
  86.     ld dist_seg(point x, point y) {
  87.         return project(x, y).on_seg(x, y) ? dist_line(x, y) : min(dist(x), dist(y));
  88.     }
  89.  
  90.     point rotate(ld sin, ld cos) { return point(cos * x - sin * y, sin * x + cos * y); }
  91.     point rotate(ld a) { return rotate(sin(a), cos(a)); }
  92.  
  93.     // rotate around the argument of vector p
  94.     point rotate(point p) { return rotate(p.x / p.abs(), p.y / p.abs()); }
  95.  
  96. };
  97.  
  98. int direction(point o, point p, point q) { return p.dir(o, q); }
  99.  
  100. point rotate_ccw90(point p) { return point(-p.y, p.x); }
  101. point rotate_cw90(point p) { return point(p.y, -p.x); }
  102.  
  103. //for reading purposes avoid using * and % operators, use the functions below:
  104. type dot(point p, point q) { return p.x * q.x + p.y * q.y; }
  105. type cross(point p, point q) { return p.x * q.y - p.y * q.x; }
  106.  
  107. //double area
  108. type area_2(point a, point b, point c) { return cross(a, b) + cross(b, c) + cross(c, a); }
  109.  
  110. int angle_less(const point& a1, const point& b1, const point& a2, const point& b2) {
  111.     //angle between (a1 and b1) vs angle between (a2 and b2)
  112.     //1  : bigger
  113.     //-1 : smaller
  114.     //0  : equal
  115.     point p1(dot(a1, b1), abs(cross(a1, b1)));
  116.     point p2(dot(a2, b2), abs(cross(a2, b2)));
  117.     if (cross(p1, p2) < 0) return 1;
  118.     if (cross(p1, p2) > 0) return -1;
  119.     return 0;
  120. }
  121.  
  122. ostream& operator<<(ostream& os, const point& p) {
  123.     os << "(" << p.x << "," << p.y << ")";
  124.     return os;
  125. }
  126.  
  127. point project_point_line(point c, point a, point b) {
  128.     ld r = dot(b - a, b - a);
  129.     if (fabs(r) < EPS) return a;
  130.     return a + (b - a) * dot(c - a, b - a) / dot(b - a, b - a);
  131. }
  132.  
  133. point project_point_ray(point c, point a, point b) {
  134.     ld r = dot(b - a, b - a);
  135.     if (fabs(r) < EPS) return a;
  136.     r = dot(c - a, b - a) / r;
  137.     if (le(r, 0)) return a;
  138.     return a + (b - a) * r;
  139. }
  140.  
  141. point project_point_segment(point c, point a, point b) {
  142.     ld r = dot(b - a, b - a);
  143.     if (fabs(r) < EPS) return a;
  144.     r = dot(c - a, b - a) / r;
  145.     if (le(r, 0)) return a;
  146.     if (ge(r, 1)) return b;
  147.     return a + (b - a) * r;
  148. }
  149.  
  150. ld distance_point_line(point c, point a, point b) {
  151.     return c.dist2(project_point_line(c, a, b));
  152. }
  153.  
  154. ld distance_point_ray(point c, point a, point b) {
  155.     return c.dist2(project_point_ray(c, a, b));
  156. }
  157.  
  158. ld distance_point_segment(point c, point a, point b) {
  159.     return c.dist2(project_point_segment(c, a, b));
  160. }
  161.  
  162. //not tested
  163. ld distance_point_plane(ld x, ld y, ld z,
  164.     ld a, ld b, ld c, ld d)
  165. {
  166.     return fabs(a * x + b * y + c * z - d) / sqrt(a * a + b * b + c * c);
  167. }
  168.  
  169. bool lines_parallel(point a, point b, point c, point d) {
  170.     return fabs(cross(b - a, d - c)) < EPS;
  171. }
  172.  
  173. bool lines_collinear(point a, point b, point c, point d) {
  174.     return lines_parallel(a, b, c, d)
  175.         && fabs(cross(a - b, a - c)) < EPS
  176.         && fabs(cross(c - d, c - a)) < EPS;
  177. }
  178.  
  179. point lines_intersect(point p, point q, point a, point b) {
  180.     point r = q - p, s = b - a, c(p % q, a % b);
  181.     if (eq(r % s, 0)) return point(LINF, LINF);
  182.     return point(point(r.x, s.x) % c, point(r.y, s.y) % c) / (r % s);
  183. }
  184.  
  185. //be careful: test LineLineIntersection before using this function
  186. point compute_line_intersection(point a, point b, point c, point d) {
  187.     b = b - a; d = c - d; c = c - a;
  188.     assert(dot(b, b) > EPS && dot(d, d) > EPS);
  189.     return a + b * cross(c, d) / cross(b, d);
  190. }
  191.  
  192. bool line_line_intersect(point a, point b, point c, point d) {
  193.     if (!lines_parallel(a, b, c, d)) return true;
  194.     if (lines_collinear(a, b, c, d)) return true;
  195.     return false;
  196. }
  197.  
  198.  
  199. //rays in direction a -> b, c -> d
  200. bool ray_ray_intersect(point a, point b, point c, point d) {
  201.     if (a.dist2(c) < EPS || a.dist2(d) < EPS ||
  202.         b.dist2(c) < EPS || b.dist2(d) < EPS) return true;
  203.     if (lines_collinear(a, b, c, d)) {
  204.         if (ge(dot(b - a, d - c), 0)) return true;
  205.         if (ge(dot(a - c, d - c), 0)) return true;
  206.         return false;
  207.     }
  208.     if (!line_line_intersect(a, b, c, d)) return false;
  209.     point inters = lines_intersect(a, b, c, d);
  210.     if (ge(dot(inters - c, d - c), 0) && ge(dot(inters - a, b - a), 0)) return true;
  211.     return false;
  212. }
  213.  
  214. bool segment_segment_intersect(point a, point b, point c, point d) {
  215.     if (a.dist2(c) < EPS || a.dist2(d) < EPS ||
  216.         b.dist2(c) < EPS || b.dist2(d) < EPS) return true;
  217.     int d1, d2, d3, d4;
  218.     d1 = direction(a, b, c);
  219.     d2 = direction(a, b, d);
  220.     d3 = direction(c, d, a);
  221.     d4 = direction(c, d, b);
  222.     if (d1 * d2 < 0 and d3 * d4 < 0) return 1;
  223.     return a.on_seg(c, d) or b.on_seg(c, d) or
  224.         c.on_seg(a, b) or d.on_seg(a, b);
  225. }
  226.  
  227. bool segment_line_intersect(point a, point b, point c, point d) {
  228.     if (!line_line_intersect(a, b, c, d)) return false;
  229.     point inters = lines_intersect(a, b, c, d);
  230.     if (inters.on_seg(a, b)) return true;
  231.     return false;
  232. }
  233.  
  234. //ray in direction c -> d
  235. bool segment_ray_intersect(point a, point b, point c, point d) {
  236.     if (a.dist2(c) < EPS || a.dist2(d) < EPS ||
  237.         b.dist2(c) < EPS || b.dist2(d) < EPS) return true;
  238.     if (lines_collinear(a, b, c, d)) {
  239.         if (c.on_seg(a, b)) return true;
  240.         if (ge(dot(d - c, a - c), 0)) return true;
  241.         return false;
  242.     }
  243.     if (!line_line_intersect(a, b, c, d)) return false;
  244.     point inters = lines_intersect(a, b, c, d);
  245.     if (!inters.on_seg(a, b)) return false;
  246.     if (ge(dot(inters - c, d - c), 0)) return true;
  247.     return false;
  248. }
  249.  
  250. //ray in direction a -> b
  251. bool ray_line_intersect(point a, point b, point c, point d) {
  252.     if (a.dist2(c) < EPS || a.dist2(d) < EPS ||
  253.         b.dist2(c) < EPS || b.dist2(d) < EPS) return true;
  254.     if (!line_line_intersect(a, b, c, d)) return false;
  255.     point inters = lines_intersect(a, b, c, d);
  256.     if (!line_line_intersect(a, b, c, d)) return false;
  257.     if (ge(dot(inters - a, b - a), 0)) return true;
  258.     return false;
  259. }
  260.  
  261. ld distance_segment_line(point a, point b, point c, point d) {
  262.     if (segment_line_intersect(a, b, c, d)) return 0;
  263.     return min(distance_point_line(a, c, d), distance_point_line(b, c, d));
  264. }
  265.  
  266. ld distance_segment_ray(point a, point b, point c, point d) {
  267.     if (segment_ray_intersect(a, b, c, d)) return 0;
  268.     ld min1 = distance_point_segment(c, a, b);
  269.     ld min2 = min(distance_point_ray(a, c, d), distance_point_ray(b, c, d));
  270.     return min(min1, min2);
  271. }
  272.  
  273. ld distance_segment_segment(point a, point b, point c, point d) {
  274.     if (segment_segment_intersect(a, b, c, d)) return 0;
  275.     ld min1 = min(distance_point_segment(c, a, b), distance_point_segment(d, a, b));
  276.     ld min2 = min(distance_point_segment(a, c, d), distance_point_segment(b, c, d));
  277.     return min(min1, min2);
  278. }
  279.  
  280. ld DistanceRayLine(point a, point b, point c, point d) {
  281.     if (ray_line_intersect(a, b, c, d)) return 0;
  282.     ld min1 = distance_point_line(a, c, d);
  283.     return min1;
  284. }
  285.  
  286. ld DistanceRayRay(point a, point b, point c, point d) {
  287.     if (ray_ray_intersect(a, b, c, d)) return 0;
  288.     ld min1 = min(distance_point_ray(c, a, b), distance_point_ray(a, c, d));
  289.     return min1;
  290. }
  291.  
  292. ld DistanceLineLine(point a, point b, point c, point d) {
  293.     if (line_line_intersect(a, b, c, d)) return 0;
  294.     return distance_point_line(a, c, d);
  295. }
  296.  
  297. point origin;
  298.  
  299. int above(point p) {
  300.     if (p.y == origin.y) return p.x > origin.x;
  301.     return p.y > origin.y;
  302. }
  303.  
  304. bool cmp(point p, point q) {
  305.     int tmp = above(q) - above(p);
  306.     if (tmp) return tmp > 0;
  307.     return p.dir(origin, q) > 0;
  308.     //Be Careful: p.dir(origin,q) == 0
  309. }
  310.  
  311. // Graham Scan O(nlog(n))
  312. vector<point> graham_hull(vector<point> pts) {
  313.     vector<point> ch(pts.size());
  314.     point mn = pts[0];
  315.  
  316.     for (point p : pts) if (p.y < mn.y or (p.y == mn.y and p.x < mn.x)) mn = p;
  317.  
  318.     origin = mn;
  319.     sort(pts.begin(), pts.end(), cmp);
  320.  
  321.     int n = 0;
  322.  
  323.     // IF: Convex hull without collinear points
  324.     // for(point p : pts) {
  325.     //     while (n > 1 and ch[n-1].dir(ch[n-2], p) < 1) n--;
  326.     //     ch[n++] = p;
  327.     // }
  328.  
  329.     //ELSE IF: Convex hull with collinear points
  330.     for (point p : pts) {
  331.         while (n > 1 and ch[n - 1].dir(ch[n - 2], p) < 0) n--;
  332.         ch[n++] = p;
  333.     }
  334.  
  335.     /*this part not safe
  336.     for(int i=pts.size()-1; i >=1; --i)
  337.     if (n > 1 and pts[i] != ch[n-1] and !pts[i].dir(pts[0], ch[n-1]))
  338.         ch[n++] = pts[i];*/
  339.         // END IF
  340.  
  341.     ch.resize(n);
  342.     return ch;
  343. }
  344.  
  345. //Monotone chain O(nlog(n))
  346. #define REMOVE_REDUNDANT
  347. #ifdef REMOVE_REDUNDANT
  348. bool between(const point& a, const point& b, const point& c) {
  349.     return (fabs(area_2(a, b, c)) < EPS && (a.x - b.x) * (c.x - b.x) <= 0 && (a.y - b.y) * (c.y - b.y) <= 0);
  350. }
  351. #endif
  352.  
  353. void monotone_hull(vector<point>& pts) {
  354.     sort(pts.begin(), pts.end());
  355.     pts.erase(unique(pts.begin(), pts.end()), pts.end());
  356.     vector<point> up, dn;
  357.     for (int i = 0; i < pts.size(); i++) {
  358.         while (up.size() > 1 && area_2(up[up.size() - 2], up.back(), pts[i]) >= 0) up.pop_back();
  359.         while (dn.size() > 1 && area_2(dn[dn.size() - 2], dn.back(), pts[i]) <= 0) dn.pop_back();
  360.         up.push_back(pts[i]);
  361.         dn.push_back(pts[i]);
  362.     }
  363.     pts = dn;
  364.     for (int i = (int)up.size() - 2; i >= 1; i--) pts.push_back(up[i]);
  365.  
  366. #ifdef REMOVE_REDUNDANT
  367.     if (pts.size() <= 2) return;
  368.     dn.clear();
  369.     dn.push_back(pts[0]);
  370.     dn.push_back(pts[1]);
  371.     for (int i = 2; i < pts.size(); i++) {
  372.         if (between(dn[dn.size() - 2], dn[dn.size() - 1], pts[i])) dn.pop_back();
  373.         dn.push_back(pts[i]);
  374.     }
  375.     if (dn.size() >= 3 && between(dn.back(), dn[0], dn[1])) {
  376.         dn[0] = dn.back();
  377.         dn.pop_back();
  378.     }
  379.     pts = dn;
  380. #endif
  381. }
  382.  
  383. //avoid using long double for comparisons, change type and remove division by 2
  384. ld compute_signed_area(const vector<point>& p) {
  385.     ld area = 0;
  386.     for (int i = 0; i < p.size(); i++) {
  387.         int j = (i + 1) % p.size();
  388.         area += p[i].x * p[j].y - p[j].x * p[i].y;
  389.     }
  390.     return area / 2.0;
  391. }
  392.  
  393. ld compute_area(const vector<point>& p) {
  394.     return fabs(compute_signed_area(p));
  395. }
  396.  
  397. ld compute_perimeter(vector<point>& p) {
  398.     ld per = 0;
  399.     for (int i = 0; i < p.size(); i++) {
  400.         int j = (i + 1) % p.size();
  401.         per += p[i].dist(p[j]);
  402.     }
  403.     return per;
  404. }
  405.  
  406. //not tested
  407. point compute_centroid(vector<point>& p) {
  408.     point c(0, 0);
  409.     ld scale = 6.0 * compute_signed_area(p);
  410.     for (int i = 0; i < p.size(); i++) {
  411.         int j = (i + 1) % p.size();
  412.         c = c + (p[i] + p[j]) * (p[i].x * p[j].y - p[j].x * p[i].y);
  413.     }
  414.     return c / scale;
  415. }
  416.  
  417. //O(n^2)
  418. bool is_simple(const vector<point>& p) {
  419.     for (int i = 0; i < p.size(); i++) {
  420.         for (int k = i + 1; k < p.size(); k++) {
  421.             int j = (i + 1) % p.size();
  422.             int l = (k + 1) % p.size();
  423.             if (i == l || j == k) continue;
  424.             if (segment_segment_intersect(p[i], p[j], p[k], p[l]))
  425.                 return false;
  426.         }
  427.     }
  428.     return true;
  429. }
  430.  
  431. bool point_in_triangle(point a, point b, point c, point cur) {
  432.     ld s1 = abs(cross(b - a, c - a));
  433.     ld s2 = abs(cross(a - cur, b - cur)) + abs(cross(b - cur, c - cur)) + abs(cross(c - cur, a - cur));
  434.     return eq(s1, s2);
  435. }
  436.  
  437. void sort_lex_hull(vector<point>& hull) {
  438.     int n = hull.size();
  439.  
  440.     //Sort hull by x
  441.     int pos = 0;
  442.     for (int i = 1; i < n; i++) if (hull[i] < hull[pos]) pos = i;
  443.     rotate(hull.begin(), hull.begin() + pos, hull.end());
  444. }
  445.  
  446. //determine if point is inside or on the boundary of a polygon (O(logn))
  447. bool point_in_convex_polygon(vector<point>& hull, point cur) {
  448.     int n = hull.size();
  449.     //Corner cases: point outside most left and most right wedges
  450.     if (cur.dir(hull[0], hull[1]) != 0 && cur.dir(hull[0], hull[1]) != hull[n - 1].dir(hull[0], hull[1]))
  451.         return false;
  452.     if (cur.dir(hull[0], hull[n - 1]) != 0 && cur.dir(hull[0], hull[n - 1]) != hull[1].dir(hull[0], hull[n - 1]))
  453.         return false;
  454.  
  455.     //Binary search to find which wedges it is between
  456.     int l = 1, r = n - 1;
  457.     while (r - l > 1) {
  458.         int mid = (l + r) / 2;
  459.         if (cur.dir(hull[0], hull[mid]) <= 0)l = mid;
  460.         else r = mid;
  461.     }
  462.     return point_in_triangle(hull[l], hull[l + 1], hull[0], cur);
  463. }
  464.  
  465. // determine if point is on the boundary of a polygon (O(N))
  466. bool point_on_polygon(vector<point>& p, point q) {
  467.     for (int i = 0; i < p.size(); i++)
  468.         if (q.dist2(project_point_segment(p[i], p[(i + 1) % p.size()], q)) < EPS) return true;
  469.     return false;
  470. }
  471.  
  472. //Shamos - Hoey for test polygon simple in O(nlog(n))
  473. inline bool adj(int a, int b, int n) { return (b == (a + 1) % n or a == (b + 1) % n); }
  474.  
  475. struct edge {
  476.     point ini, fim;
  477.     edge(point ini = point(0, 0), point fim = point(0, 0)) : ini(ini), fim(fim) {}
  478. };
  479.  
  480. //< here means the edge on the top will be at the begin
  481. bool operator < (const edge& a, const edge& b) {
  482.     if (a.ini == b.ini) return direction(a.ini, a.fim, b.fim) < 0;
  483.     if (a.ini.x < b.ini.x) return direction(a.ini, a.fim, b.ini) < 0;
  484.     return direction(a.ini, b.fim, b.ini) < 0;
  485. }
  486.  
  487. bool is_simple_polygon(const vector<point>& pts) {
  488.     vector <pair<point, pii>> eve;
  489.     vector <pair<edge, int>> edgs;
  490.     set <pair<edge, int>> sweep;
  491.     int n = (int)pts.size();
  492.     for (int i = 0; i < n; i++) {
  493.         point l = min(pts[i], pts[(i + 1) % n]);
  494.         point r = max(pts[i], pts[(i + 1) % n]);
  495.         eve.pb({ l, {0, i} });
  496.         eve.pb({ r, {1, i} });
  497.         edgs.pb(make_pair(edge(l, r), i));
  498.     }
  499.     sort(eve.begin(), eve.end());
  500.     for (auto e : eve) {
  501.         if (!e.nd.st) {
  502.             auto cur = sweep.lower_bound(edgs[e.nd.nd]);
  503.             pair<edge, int> above, below;
  504.             if (cur != sweep.end()) {
  505.                 below = *cur;
  506.                 if (!adj(below.nd, e.nd.nd, n) and segment_segment_intersect(pts[below.nd], pts[(below.nd + 1) % n], pts[e.nd.nd], pts[(e.nd.nd + 1) % n]))
  507.                     return false;
  508.             }
  509.             if (cur != sweep.begin()) {
  510.                 above = *(--cur);
  511.                 if (!adj(above.nd, e.nd.nd, n) and segment_segment_intersect(pts[above.nd], pts[(above.nd + 1) % n], pts[e.nd.nd], pts[(e.nd.nd + 1) % n]))
  512.                     return false;
  513.             }
  514.             sweep.insert(edgs[e.nd.nd]);
  515.         }
  516.         else {
  517.             auto below = sweep.upper_bound(edgs[e.nd.nd]);
  518.             auto cur = below, above = --cur;
  519.             if (below != sweep.end() and above != sweep.begin()) {
  520.                 --above;
  521.                 if (!adj(below->nd, above->nd, n) and segment_segment_intersect(pts[below->nd], pts[(below->nd + 1) % n], pts[above->nd], pts[(above->nd + 1) % n]))
  522.                     return false;
  523.             }
  524.             sweep.erase(cur);
  525.         }
  526.     }
  527.     return true;
  528. }
  529.  
  530. int main() {
  531.     ios_base::sync_with_stdio(false);
  532.     cin.tie(0);
  533.     int t;
  534.     cin >> t;
  535.     while(t--) {
  536.         int n;
  537.         cin >> n;
  538.         vector<point> v(n);
  539.         for(int i = 0; i < n; i++) {
  540.             cin >> v[i].x >> v[i].y;
  541.         }
  542.         int q;
  543.         cin >> q;
  544.         while(q--) {
  545.             point a;
  546.             cin >> a.x >> a.y;
  547.             bool ok = true;
  548.             if(v.size() == 1) {
  549.                 ok = a.dist(v[0]) < EPS;
  550.             } else if(v.size() == 2) {
  551.                 ok = a.on_seg(v[0], v[1]);
  552.             } else {
  553.                 ok = point_in_convex_polygon(v, a);
  554.             }
  555.             cout << (ok ? "Yes\n" : "No\n");
  556.         }
  557.         if(t) {
  558.             cout << "\n";
  559.         }
  560.     }
  561.     return 0;
  562. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement