main.cc 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include <cstdio>
  2. #include <cstring>
  3. #define D_MAX 100000
  4. #define S_MAX 100000
  5. char ans[D_MAX + 1];
  6. int C[S_MAX];
  7. int E[S_MAX];
  8. int gcd(int a, int b) {
  9. if (b == 0) return a;
  10. return gcd(b, a % b);
  11. }
  12. struct Frac {
  13. int a;
  14. int b;
  15. bool operator==(const Frac &that) const {
  16. return this->a == that.a && this->b == that.b;
  17. }
  18. void Norm() {
  19. int c = gcd(a, b);
  20. a /= c;
  21. b /= c;
  22. }
  23. } frac;
  24. int main() {
  25. int T;
  26. scanf("%d", &T);
  27. for (int t = 1; t <= T; t++) {
  28. int D, S, C_sum = 0, E_sum = 0;
  29. scanf("%d %d", &D, &S);
  30. bool parallel = true;
  31. for (int i = 0; i < S; i++) {
  32. scanf("%d %d", &C[i], &E[i]);
  33. C_sum += C[i];
  34. E_sum += E[i];
  35. if (i == 0) {
  36. frac = Frac{C[i], E[i]};
  37. frac.Norm();
  38. continue;
  39. }
  40. Frac curr = Frac{C[i], E[i]};
  41. curr.Norm();
  42. parallel |= frac == curr;
  43. }
  44. memset(ans, 0, sizeof(ans));
  45. for (int i = 0, A, B; i < D; i++) {
  46. scanf("%d %d", &A, &B);
  47. if (C_sum < A || E_sum < B) {
  48. ans[i] = 'N';
  49. continue;
  50. }
  51. if (parallel) {
  52. if (A * frac.b > (E_sum - B) * frac.a) ans[i] = 'N';
  53. else ans[i] = 'Y';
  54. continue;
  55. }
  56. int a = C[0] * (E_sum - B) - E[0] * A;
  57. int b = C[0] * E[1] - C[1] * E[0];
  58. Frac y = Frac{a, b};
  59. y.Norm();
  60. a = y.a;
  61. b = y.b;
  62. Frac x = Frac{A * b - C[1] * a, C[0] * b};
  63. x.Norm();
  64. if (y.a * y.b >= 0 && x.a * x.b >= 0 && y.a <= y.b && x.a <= x.b) {
  65. ans[i] = 'Y';
  66. continue;
  67. }
  68. Frac x0 = Frac{A, C[0]};
  69. x0.Norm();
  70. Frac x1 = Frac{E_sum - B, E[0]};
  71. x1.Norm();
  72. if (x0.a * x1.b > x0.b * x1.a) {
  73. if (x0.a > x0.b) ans[i] = 'Y';
  74. else ans[i] = 'N';
  75. } else {
  76. ans[i] = 'Y';
  77. }
  78. }
  79. printf("Case #%d: %s\n", t, ans);
  80. }
  81. return 0;
  82. }