QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#73514#4884. Battleship: New Rulesaurelion_solWA 21ms3340kbC++142.9kb2023-01-25 15:00:322023-01-25 15:00:34

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-01-25 15:00:34]
  • 评测
  • 测评结果:WA
  • 用时:21ms
  • 内存:3340kb
  • [2023-01-25 15:00:32]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

void answer(int x, int y) {
    if (x >= 0 || y >= 0) {
        x++, y++;
    }
    cout << "! " << x << " " << y << endl;
    int ans;
    cin >> ans;
    if (ans != 1) {
        exit(0);
    }
}

vector<vector<int>> cache;

int ask(int x, int y) {
    if (x >= (int)cache.size() || y >= (int)cache.size() || x < 0 || y < 0) {
        return 0;
    }
    cout << "? " << x + 1 << " " << y + 1 << endl;
    int ans;
    cin >> ans;
    if (ans == -1) {
        exit(0);
    }
    cache[x][y] = ans;
    return ans;
}

vector<vector<bool>> used;

void color4(int x, int y) {
    for (int dx = 0; dx < 2; dx++) {
        for (int dy = 0; dy < 2; dy++) {
            used[x + dx][y + dy] = true;
        }
    }
}

bool upd(int x, int y) {
    bool res = true;
    for (int dx = 0; dx < 2; dx++) {
        for (int dy = 0; dy < 2; dy++) {
            if (ask(x - dx, y - dy) == 1) {
                color4(x - dx, y - dy);
                res = false;
            }
        }
    }
    return res;
}

pair<int, int> func(int x1, int y1, int x2, int y2) {
    if (x2 - x1 == 1 && y2 - y1 == 1) {
        return make_pair(x1, y1);
    }
    tuple<int, int, int, int> r1, r2;
    if (x2 - x1 >= y2 - y1) {
        int mid = (x1 + x2) / 2;
        for (int i = y1; i < y2; i++) {
            if (upd(mid, i)) {
                return make_pair(mid, i);
            }
        }
        r1 = make_tuple(x1, y1, mid, y2);
        r2 = make_tuple(mid + 1, y1, x2, y2);
    } else {
        int mid = (y1 + y2) / 2;
        for (int i = x1; i < x2; i++) {
            if (upd(i, mid)) {
                return make_pair(i, mid);
            }
        }
        r1 = make_tuple(x1, y1, x2, mid);
        r2 = make_tuple(x1, mid + 1, x2, y2);
    }
    int s1 = 0;
    for (int i = get<0>(r1); i < get<2>(r1); i++) {
        for (int j = get<1>(r1); j < get<3>(r1); j++) {
            if (!used[i][j]) {
                s1++;
            }
        }
    }
    if (s1 % 2 == 1) {
        return func(get<0>(r1), get<1>(r1), get<2>(r1), get<3>(r1));
    } else {
        return func(get<0>(r2), get<1>(r2), get<2>(r2), get<3>(r2));
    }
}

void solve(int n) {
    used.clear();
    used.reserve(n + 1);
    for (int i = 0; i < n + 1; i++) {
        used.emplace_back(vector<bool>(n + 1, false));
    }
    pair<int, int> t = func(0, 0, n + 1, n + 1);
    answer(t.first - 1, t.second - 1);
}

void solve_full(int n) {
    if (n % 2 == 1) {
        answer(-1, -1);
        return;
    }
    cache.clear();
    cache.reserve(n);
    for (int i = 0; i < n; i++) {
        cache.emplace_back(vector<int>(n, -1));
    }
    solve(n);
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int t;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
		if(n>10)exit(0);
        solve_full(n);
    }

    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 3ms
memory: 3340kb

input:

2
3
1
4
1
0
0
1
0
0
0
0
0
0
1

output:

! -1 -1
? 3 1
? 2 1
? 3 2
? 3 1
? 2 2
? 2 1
? 3 3
? 3 2
? 2 3
? 2 2
! 2 2

result:

ok max_C=2.50, avg_C=1.25 (2 test cases)

Test #2:

score: 0
Accepted
time: 21ms
memory: 3340kb

input:

100
4
1
0
0
1
0
0
0
0
0
0
1
4
1
0
0
1
0
0
0
0
0
0
1
4
0
1
0
0
0
1
0
0
0
0
1
4
0
1
0
0
0
1
0
0
0
0
1
4
1
0
0
1
0
0
0
0
0
0
1
4
1
0
0
1
0
0
0
0
0
0
1
4
1
0
0
1
0
0
0
0
0
0
1
4
0
1
0
0
0
1
0
0
0
0
1
4
0
1
0
0
0
1
0
0
0
0
1
4
0
1
0
0
0
1
0
0
0
0
1
4
0
1
0
0
0
1
0
0
0
0
1
4
1
0
0
1
0
0
0
0
0
0
1
4
0
1
0
...

output:

? 3 1
? 2 1
? 3 2
? 3 1
? 2 2
? 2 1
? 3 3
? 3 2
? 2 3
? 2 2
! 2 2
? 3 1
? 2 1
? 3 2
? 3 1
? 2 2
? 2 1
? 3 3
? 3 2
? 2 3
? 2 2
! 2 2
? 3 1
? 2 1
? 3 2
? 3 1
? 2 2
? 2 1
? 3 3
? 3 2
? 2 3
? 2 2
! 2 2
? 3 1
? 2 1
? 3 2
? 3 1
? 2 2
? 2 1
? 3 3
? 3 2
? 2 3
? 2 2
! 2 2
? 3 1
? 2 1
? 3 2
? 3 1
? 2 2
? 2 1
...

result:

ok max_C=2.50, avg_C=2.50 (100 test cases)

Test #3:

score: -100
Wrong Answer
time: 3ms
memory: 3320kb

input:

100
10
1
0
1
1
0
0
0
1
0
0
1
0
1
0
0
1
0
1
1
0
1
0
0
1
0
1
1
0
1
0
0
1
0
1
1
0
1
0
1
1
1
1
0
0
1
1
1
0
0
0
1
0
1
0
1
0
1
0
1
1
-1

output:

? 6 1
? 5 1
? 6 2
? 6 1
? 5 2
? 5 1
? 6 3
? 6 2
? 5 3
? 5 2
? 6 4
? 6 3
? 5 4
? 5 3
? 6 5
? 6 4
? 5 5
? 5 4
? 6 6
? 6 5
? 5 6
? 5 5
? 6 7
? 6 6
? 5 7
? 5 6
? 6 8
? 6 7
? 5 8
? 5 7
? 6 9
? 6 8
? 5 9
? 5 8
? 6 10
? 6 9
? 5 10
? 5 9
? 6 10
? 5 10
? 1 6
? 1 5
? 2 6
? 2 5
? 1 6
? 1 5
? 3 6
? 3 5
? 2 6
? ...

result:

wrong output format Unexpected end of file - int32 expected (test case 1)