fork(2) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct point {
  5. int x;
  6. int y;
  7. };
  8.  
  9. int f (point *p, int N, int x, int y) {
  10. int i1, i2, n, S, S1, S2, S3, flag;
  11. for (n = 0; n < N; n++) {
  12. flag = 0;
  13. i1 = n < N-1 ? n + 1 : 0;
  14. while (flag == 0) {
  15. i2 = i1 + 1;
  16. if (i2 >= N)
  17. i2 = 0;
  18. if (i2 == (n < N-1 ? n + 1 : 0))
  19. break;
  20. S = abs (p[i1].x * (p[i2].y - p[n].y) +
  21. p[i2].x * (p[n].y - p[i1].y) +
  22. p[n].x * (p[i1].y - p[i2].y));
  23. S1 = abs (p[i1].x * (p[i2].y - y) +
  24. p[i2].x * (y - p[i1].y) +
  25. x * (p[i1].y - p[i2].y));
  26. S2 = abs (p[n ].x * (p[i2].y - y) +
  27. p[i2].x * (y - p[n].y) +
  28. x * (p[n].y - p[i2].y));
  29. S3 = abs (p[i1].x * (p[n].y - y) +
  30. p[n].x * (y - p[i1].y) +
  31. x * (p[i1].y - p[n].y));
  32. if (S == S1 + S2 + S3) {
  33. flag = 1;
  34. break;
  35. }
  36. i1 ++;
  37. if (i1 >= N)
  38. i1 = 0;
  39. }
  40. if (flag == 0)
  41. break;
  42. }
  43. return flag;
  44. }
  45.  
  46. int main() {
  47. int n, x, y;
  48. cin >> n >> x >> y;
  49. point* p = new point[n];
  50. for (int i = 0; i < n; i++)
  51. cin >> p[i].x >> p[i].y;
  52. cout << (f(p, n, x, y) ? "YES" : "NO");
  53. return 0;
  54. }
Success #stdin #stdout 0s 15232KB
stdin
5 3 1
9 2
3 0
-2 -4
-4 0
-4 5
stdout
YES