Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.lang.*;
- import java.io.*;
- public class Solution {
- static BufferedReader br;
- static BufferedWriter bw;
- static StringTokenizer st;
- public static void main(String[] args) throws java.lang.Exception {
- br = new BufferedReader(new InputStreamReader(System.in));
- bw = new BufferedWriter(new OutputStreamWriter(System.out));
- int numTasks = Integer.parseInt(br.readLine());
- for (int i = 0; i < numTasks; ++i)
- solve(i + 1);
- br.close();
- bw.close();
- }
- static void solve(int caseNum) throws IOException {
- int A = Integer.parseInt(br.readLine());
- int l = 1;
- while (l * l < A)
- ++l;
- int min_i = 2;
- int min_j = 2;
- int maxi = l + 1;
- int maxj = l + 1;
- boolean[][] done = new boolean[l][l];
- int[][] value = new int[l][l];
- for (int i = 1; i < l - 1; ++i) {
- for (int j = 1; j < l - 1; ++j) {
- value[i][j] = 9;
- }
- }
- for (int i = 1; i < l - 1; ++i) {
- value[1][i] = 36;
- value[i][1] = 36;
- value[l - 2][i] = 36;
- value[i][l - 2] = 36;
- }
- value[1][1] = 144;
- value[1][l - 2] = 144;
- value[l - 2][1] = 144;
- value[l - 2][l - 2] = 144;
- int i_guess = 1;
- int j_guess = 1;
- while (true) {
- bw.write((i_guess + 1) + " " + (j_guess + 1) + "\n");
- bw.flush();
- st = new StringTokenizer(br.readLine());
- int i_read = Integer.parseInt(st.nextToken());
- int j_read = Integer.parseInt(st.nextToken());
- // success!
- if (i_read == 0 && j_read == 0)
- return;
- --i_read;
- --j_read;
- // already had that square
- if (done[i_read][j_read])
- continue;
- done[i_read][j_read] = true;
- // corner case (ha)
- if ((j_read == 0 || j_read == l - 1) && (i_read == 0 || i_read == l - 1)) {
- int ci = i_read == 0 ? 1 : l - 2;
- int cj = j_read == 0 ? 1 : l - 2;
- value[ci][cj] -= 100;
- }
- // edge case (ha)
- else if (i_read == 0 || i_read == l - 1) {
- int ci = i_read == 0 ? 1 : l - 2;
- value[ci][j_read - 1] -= 10;
- value[ci][j_read] -= 10;
- value[ci][j_read + 1] -= 10;
- } else if (j_read == 0 || j_read == l - 1) {
- int cj = j_read == 0 ? 1 : l - 2;
- value[i_read - 1][cj] -= 10;
- value[i_read][cj] -= 10;
- value[i_read + 1][cj] -= 10;
- } else {
- for (int di = -1; di <= +1; ++di) {
- for (int dj = -1; dj <= +1; ++dj) {
- --value[i_read + di][j_read + dj];
- }
- }
- }
- int high_val = Integer.MIN_VALUE;
- for (int i = 1; i < l - 1; ++i) {
- for (int j = 1; j < l - 1; ++j) {
- if (value[i][j] > high_val) {
- i_guess = i;
- j_guess = j;
- high_val = value[i][j];
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement