fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5. using ll = long long;
  6.  
  7. bool isRed(ll x, ll y) {
  8. // Si c'est le sommet du triangle initial
  9. if (x == 1 && y == 1) return true;
  10.  
  11. // Trouver la plus grande puissance de 2 inférieure ou égale à x
  12. ll step = 1;
  13. while ((1LL << step) <= x) step++;
  14. step--;
  15.  
  16. // Taille du sous-triangle à cette étape
  17. ll size = (1LL << step);
  18.  
  19. // Position relative dans le sous-triangle
  20. ll relX = x;
  21. ll relY = y;
  22.  
  23. while (size > 1) {
  24. // Si le point est dans le triangle du milieu (bleu)
  25. if (relX > size/2 && relY > relX - size && relY <= relX) {
  26. return false;
  27. }
  28.  
  29. // Ajuster les coordonnées pour le sous-triangle approprié
  30. if (relX > size/2) {
  31. if (relY <= relX - size) {
  32. // Triangle gauche
  33. relX = relX - size/2;
  34. } else if (relY > relX) {
  35. // Triangle droit
  36. relX = relX - size/2;
  37. relY = relY - size;
  38. }
  39. }
  40.  
  41. size /= 2;
  42. }
  43.  
  44. return true;
  45. }
  46.  
  47. int main() {
  48. ios_base::sync_with_stdio(false);
  49. cin.tie(nullptr);
  50.  
  51. int Q;
  52. cin >> Q;
  53.  
  54. while (Q--) {
  55. ll x, y;
  56. cin >> x >> y;
  57. cout << (isRed(x, y) ? 1 : 0) << "\n";
  58. }
  59.  
  60. return 0;
  61. }
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