結果
| 問題 |
No.1949 足し算するだけのパズルゲーム(2)
|
| コンテスト | |
| ユーザー |
Nachia
|
| 提出日時 | 2022-05-20 22:17:57 |
| 言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 80 ms / 3,000 ms |
| コード長 | 1,627 bytes |
| コンパイル時間 | 3,434 ms |
| コンパイル使用メモリ | 129,868 KB |
| 最終ジャッジ日時 | 2025-01-29 10:50:48 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <array>
#include <queue>
#include <atcoder/modint>
using namespace std;
using i32 = int32_t;
using u32 = uint32_t;
using i64 = int64_t;
using u64 = uint64_t;
#define rep(i,n) for(int i=0; i<(int)(n); i++)
const i64 INF = 1001001001001001001;
using modint = atcoder::static_modint<998244353>;
const int dx[4] = {-1,0,1,0};
const int dy[4] = {0,1,0,-1};
int main(){
int H,W; cin >> H >> W;
int Y,X; cin >> Y >> X; Y--; X--;
vector<vector<i64>> A(H, vector<i64>(W));
rep(y,H) rep(x,W) cin >> A[y][x];
vector<vector<int>> F(H, vector<int>(W, 0));
auto is_in = [&](int y, int x) -> bool {
return 0 <= y && 0 <= x && y < H && x < W;
};
i64 h = A[Y][X];
F[Y][X] = 1;
priority_queue<pair<i64, pair<int,int>>> Que;
rep(d,4) if(is_in(Y-dy[d], X-dx[d])){
F[Y-dy[d]][X-dx[d]] = 1;
Que.push(make_pair(-A[Y-dy[d]][X-dx[d]], make_pair(Y-dy[d], X-dx[d])));
}
while(Que.size()){
auto [y,x] = Que.top().second;
Que.pop();
if(h <= A[y][x]){ cout << "No\n"; return 0; }
h += A[y][x];
rep(d,4){
int nxy = y + dy[d], nxx = x + dx[d];
if(!is_in(nxy, nxx)) continue;
if(F[nxy][nxx]) continue;
F[nxy][nxx] = 1;
Que.push(make_pair(-A[nxy][nxx], make_pair(nxy, nxx)));
}
}
cout << "Yes\n";
return 0;
}
struct ios_do_not_sync{
ios_do_not_sync(){
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
}
} ios_do_not_sync_instance;
Nachia