Advertisement
Guest User

Untitled

a guest
Apr 8th, 2018
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.65 KB | None | 0 0
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4.  
  5. public class Solution {
  6.  
  7. static BufferedReader br;
  8. static BufferedWriter bw;
  9. static StringTokenizer st;
  10.  
  11. public static void main(String[] args) throws java.lang.Exception {
  12.  
  13. br = new BufferedReader(new InputStreamReader(System.in));
  14. bw = new BufferedWriter(new OutputStreamWriter(System.out));
  15.  
  16. int numTasks = Integer.parseInt(br.readLine());
  17. for (int i = 0; i < numTasks; ++i)
  18. solve(i + 1);
  19.  
  20. br.close();
  21. bw.close();
  22. }
  23.  
  24. static void solve(int caseNum) throws IOException {
  25.  
  26. int A = Integer.parseInt(br.readLine());
  27.  
  28. int l = 1;
  29. while (l * l < A)
  30. ++l;
  31.  
  32. int min_i = 2;
  33. int min_j = 2;
  34. int maxi = l + 1;
  35. int maxj = l + 1;
  36.  
  37. boolean[][] done = new boolean[l][l];
  38. int[][] value = new int[l][l];
  39.  
  40. for (int i = 1; i < l - 1; ++i) {
  41. for (int j = 1; j < l - 1; ++j) {
  42. value[i][j] = 9;
  43. }
  44. }
  45.  
  46. for (int i = 1; i < l - 1; ++i) {
  47. value[1][i] = 36;
  48. value[i][1] = 36;
  49. value[l - 2][i] = 36;
  50. value[i][l - 2] = 36;
  51. }
  52.  
  53. value[1][1] = 144;
  54. value[1][l - 2] = 144;
  55. value[l - 2][1] = 144;
  56. value[l - 2][l - 2] = 144;
  57.  
  58. int i_guess = 1;
  59. int j_guess = 1;
  60.  
  61. while (true) {
  62.  
  63. bw.write((i_guess + 1) + " " + (j_guess + 1) + "\n");
  64. bw.flush();
  65.  
  66. st = new StringTokenizer(br.readLine());
  67. int i_read = Integer.parseInt(st.nextToken());
  68. int j_read = Integer.parseInt(st.nextToken());
  69.  
  70. // success!
  71. if (i_read == 0 && j_read == 0)
  72. return;
  73.  
  74. --i_read;
  75. --j_read;
  76.  
  77. // already had that square
  78. if (done[i_read][j_read])
  79. continue;
  80.  
  81. done[i_read][j_read] = true;
  82.  
  83. // corner case (ha)
  84. if ((j_read == 0 || j_read == l - 1) && (i_read == 0 || i_read == l - 1)) {
  85. int ci = i_read == 0 ? 1 : l - 2;
  86. int cj = j_read == 0 ? 1 : l - 2;
  87. value[ci][cj] -= 100;
  88.  
  89. }
  90.  
  91. // edge case (ha)
  92. else if (i_read == 0 || i_read == l - 1) {
  93. int ci = i_read == 0 ? 1 : l - 2;
  94. value[ci][j_read - 1] -= 10;
  95. value[ci][j_read] -= 10;
  96. value[ci][j_read + 1] -= 10;
  97. } else if (j_read == 0 || j_read == l - 1) {
  98. int cj = j_read == 0 ? 1 : l - 2;
  99. value[i_read - 1][cj] -= 10;
  100. value[i_read][cj] -= 10;
  101. value[i_read + 1][cj] -= 10;
  102. } else {
  103. for (int di = -1; di <= +1; ++di) {
  104. for (int dj = -1; dj <= +1; ++dj) {
  105. --value[i_read + di][j_read + dj];
  106. }
  107. }
  108. }
  109.  
  110. int high_val = Integer.MIN_VALUE;
  111.  
  112. for (int i = 1; i < l - 1; ++i) {
  113. for (int j = 1; j < l - 1; ++j) {
  114. if (value[i][j] > high_val) {
  115. i_guess = i;
  116. j_guess = j;
  117. high_val = value[i][j];
  118. }
  119. }
  120. }
  121.  
  122. }
  123.  
  124. }
  125.  
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement