fork download
  1. #include <iostream>
  2. using namespace std;
  3. using ll = long long;
  4.  
  5. bool isRed(ll x, ll y) {
  6. // Convertir en base 2 pour trouver le motif
  7. while (x > 2) {
  8. // Trouver le plus grand triangle qui contient ce point
  9. ll level = 1;
  10. while ((1LL << level) - 1 < x) level++;
  11. level--;
  12.  
  13. ll size = (1LL << level) - 1;
  14.  
  15. // Si le point est dans la moitié inférieure
  16. if (x > size) {
  17. // Calculer la position relative dans la rangée
  18. ll base_start = x - size;
  19. if (y > base_start && y <= base_start + size) {
  20. // Point dans le triangle bleu du milieu
  21. return false;
  22. }
  23.  
  24. // Ajuster les coordonnées pour le sous-triangle
  25. if (y > base_start + size) {
  26. // Triangle droit
  27. y -= (base_start + size);
  28. }
  29. x -= size;
  30. }
  31. }
  32.  
  33. // Les points dans le triangle initial sont rouges
  34. return true;
  35. }
  36.  
  37. int main() {
  38. ios_base::sync_with_stdio(false);
  39. cin.tie(nullptr);
  40.  
  41. int Q;
  42. cin >> Q;
  43.  
  44. while (Q--) {
  45. ll x, y;
  46. cin >> x >> y;
  47. cout << isRed(x, y) << '\n';
  48. }
  49.  
  50. return 0;
  51. }
Success #stdin #stdout 0.01s 5296KB
stdin
6
1 1
5 3
8 2
8 6
5 4
6 4
stdout
1
0
0
0
0
0