結果

問題 No.5024 魔法少女うなと宝集め
コンテスト
ユーザー Ojun
提出日時 2026-05-02 17:21:09
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 1,850 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 890 ms
コンパイル使用メモリ 103,260 KB
実行使用メモリ 6,400 KB
スコア 510,183
最終ジャッジ日時 2026-05-02 17:21:17
合計ジャッジ時間 8,294 ms
ジャッジサーバーID
(参考情報)
judge2_1 / judge3_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 45 WA * 5
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <iostream>
#include <limits>
#include <vector>
using namespace std;
template<typename T> inline bool chmax(T &a, T b) { return ((a < b) ? (a = b, true) : (false)); }
template<typename T> inline bool chmin(T &a, T b) { return ((a > b) ? (a = b, true) : (false)); }

int main() {
    int N, T;
    cin >> N >> T;

    int a_max = numeric_limits<int>::min();
    int max_i = 0;
    int max_j = 0;

    vector<vector<int>> A(N, vector<int>(N));

    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            cin >> A[i][j];
            if (A[i][j] > a_max) {
                a_max = A[i][j];
                max_i = i;
                max_j = j;
            }
        }
    }

    vector<vector<bool>> visited(N, vector<bool>(N, false));
    vector<pair<int, int>> path;

    int cur_i = max_i;
    int cur_j = max_j;
    visited[cur_i][cur_j] = true;
    path.push_back(make_pair(cur_i, cur_j));

    const int di[4] = {-1, 1, 0, 0};
    const int dj[4] = {0, 0, -1, 1};

    while ((int)path.size() <= T) {
        int next_i = -1;
        int next_j = -1;
        int best_score = -1;

        for (int dir = 0; dir < 4; dir++) {
            int ni = cur_i + di[dir];
            int nj = cur_j + dj[dir];
            if (ni < 0 || ni >= N || nj < 0 || nj >= N) continue;
            if (visited[ni][nj]) continue;
            if (A[ni][nj] > best_score) {
                best_score = A[ni][nj];
                next_i = ni;
                next_j = nj;
            }
        }

        if (next_i == -1) {
            break;
        }

        cur_i = next_i;
        cur_j = next_j;
        visited[cur_i][cur_j] = true;
        path.push_back(make_pair(cur_i, cur_j));
    }

    cout << path.size() << endl;
    for (const auto &p : path) {
        cout << p.first << " " << p.second << endl;
    }

    return 0;
}
0