結果

問題 No.3737 Quiz Time
コンテスト
ユーザー てんぷら
提出日時 2026-09-19 16:29:37
言語 C++23
(gcc 15.3.0 + boost 1.92.0 + ACL)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 1,811 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,207 ms
コンパイル使用メモリ 335,984 KB
実行使用メモリ 10,052 KB
平均クエリ数 74.57
最終ジャッジ日時 2026-09-19 16:29:50
合計ジャッジ時間 5,610 ms
ジャッジサーバーID
(参考情報)
judge4_0 / <nil>
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 25 WA * 25
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;
#ifdef TEMPURA
#else
#define debug(...) ((void)0)
#define msg(...) ((void)0)
#endif
#define rep(i, n) for(int i = 0; i < (int)(n); i++)
#define REP(i, m, n) for(int i = (int)(m); i < (int)(n); i++)

using ll = long long;
using ull = unsigned long long;
using i128 = __int128_t;

template <class T>
inline bool chmin(T &a, T b) {
    if(a > b) {
        a = b;
        return true;
    }
    return false;
}

template <class T>
inline bool chmax(T &a, T b) {
    if(a < b) {
        a = b;
        return true;
    }
    return false;
}
// #include <atcoder/modint>
// using mint = atcoder::modint998244353;

int n;
pair<int, int> query(int x, int y) {
    cout << "? " << x + 1 << " " << y + 1 << endl;
    int v;
    cin >> v;
    --v;
    return {v / n, v % n};
}

int main() {
    cin >> n;
    auto [x0, y0] = query(0, 0);
    auto [x1, y1] = query(0, 1);
    if(x0 == x1) {
        vector<int> r(n), c(n);
        c[0] = x0;
        r[0] = y0;
        r[1] = y1;
        c[n - 1] = n * (n - 1) / 2 - x0;
        rep(i, n - 2) {
            auto [x, y] = query(i + 1, i + 2);
            c[i + 1] = x;
            c[n - 1] -= x;
            r[i + 2] = y;
        }
        cout << "!" << endl;
        rep(i, n) {
            rep(j, n) cout << r[i] * n + c[j] + 1 << " \n"[j + 1 == n];
        }
    } else if(y0 == y1) {
        vector<int> r(n), c(n);
        r[0] = y0;
        c[0] = x0;
        c[1] = x1;
        r[n - 1] = n * (n - 1) / 2 - y0;
        rep(i, n - 2) {
            auto [x, y] = query(i + 1, i + 2);
            r[i + 1] = y;
            r[n - 1] -= y;
            c[i + 2] = x;
        }
        cout << "!" << endl;
        rep(i, n) {
            rep(j, n) cout << r[i] + c[j] * n + 1 << " ";
            cout<<endl;
        }
    }
}
0