結果

問題 No.5024 魔法少女うなと宝集め
コンテスト
ユーザー takahashihiroto0705-hub
提出日時 2026-05-02 17:29:23
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 55 ms / 2,000 ms
コード長 2,414 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 3,885 ms
コンパイル使用メモリ 361,864 KB
実行使用メモリ 6,400 KB
スコア 1,788,314
最終ジャッジ日時 2026-05-02 17:29:39
合計ジャッジ時間 7,800 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge3_1
純コード判定しない問題か言語
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 50
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
using namespace std;
using ll = long long;
const ll mod = 998244353;
#define fi first
#define se second
#define rep(i,N) for(ll i=0;i<N;i++)
#define all(A) A.begin(),A.end()
#define faster ios::sync_with_stdio(false);cin.tie(nullptr)

const vector<ll> dx={0,1,0,-1};
const vector<ll> dy={1,0,-1,0};

int main() {
    random_device seed_gen;
    mt19937 engine(seed_gen());
    uniform_real_distribution<float> dist(0,1);
    ll N,T;
    cin >> N >> T;
    vector<vector<ll>> A(N,vector<ll>(N));
    vector<vector<ll>> B(N,vector<ll>(N));
    ll SUM=0;
    rep(i,N) rep(j,N) cin >> A[i][j],B[i][j]=A[i][j]*(50-abs(2*i-19)-abs(2*j-19)),SUM+=B[i][j];
    vector<pair<ll,ll>> ANS;
    ll ans=0;
    ll Q=10000;
    rep(I,N) rep(J,N){
        ll q=(Q*B[I][J])/SUM;
        while(q--){
            vector<pair<ll,ll>> CNT;
            ll cnt=A[I][J];
            ll i=I,j=J;
            CNT.push_back({i,j});
            vector<vector<bool>> used(N,vector<bool>(N,false));
            used[i][j]=true;
            while((ll)CNT.size()<T){
                vector<pair<ll,ll>> V;
                ll sum=0;
                rep(k,4){
                    ll ni=i+dx[k];
                    ll nj=j+dy[k];
                    if(ni<0||N<=ni) continue;
                    if(nj<0||N<=nj) continue;
                    if(used[ni][nj]) continue;
                    V.push_back({k,B[ni][nj]});
                    sum+=B[ni][nj];
                }
                if((ll)V.size()==0){
                    break;
                }
                ll X=sum*dist(engine);
                rep(k,(ll)V.size()){
                    X-=V[k].se;
                    if(X<0){
                        i+=dx[V[k].fi];
                        j+=dy[V[k].fi];
                        used[i][j]=true;
                        cnt+=A[i][j];
                        CNT.push_back({i,j});
                        break;
                    }
                    if(k+1==(ll)V.size()){
                        cout << "Error" << endl;
                    }
                }
            }
            if(cnt>ans){
                ans=cnt;
                ANS=CNT;
            }
        }
    }
    cout << ANS.size() << endl;
    rep(i,(ll)ANS.size()){
        cout << ANS[i].fi << " " << ANS[i].se << endl;
    }
    return 0;
}
0