結果
| 問題 | No.5024 魔法少女うなと宝集め |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-05-02 17:29:23 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 55 ms / 2,000 ms |
| コード長 | 2,414 bytes |
| 記録 | |
| コンパイル時間 | 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 |
ソースコード
#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;
}