結果
問題 | No.2826 Earthwork |
ユーザー |
|
提出日時 | 2024-07-26 10:26:57 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 2,222 bytes |
コンパイル時間 | 2,845 ms |
コンパイル使用メモリ | 214,784 KB |
最終ジャッジ日時 | 2025-02-23 18:07:27 |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | RE * 40 |
ソースコード
#include <bits/stdc++.h>using namespace std;template<class T> vector<T> Dijkstra(vector<vector<pair<int, T>>> &G, int s){vector<T> D(G.size(), 1e18);D[s] = 0;priority_queue<pair<T, int>, vector<pair<T, int>>, greater<pair<T, int>>> q;q.push(make_pair(0, s));while (!q.empty()){auto [d, u] = q.top();q.pop();if (D[u] < d){continue;}for (auto [v, c] : G[u]){d = D[u] + c;if (d < D[v]){D[v] = d;q.push(make_pair(d, v));}}}return D;}int main(){int N;cin >> N;vector<vector<int>> H(N, vector<int>(N));for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){cin >> H[i][j];}}vector<string> S(N);for (int i = 0; i < N; i++){cin >> S[i];}vector<vector<long long>> A(N - 1, vector<long long>(N));for (int i = 0; i < N - 1; i++){for (int j = 0; j < N; j++){cin >> A[i][j];}}vector<vector<long long>> B(N, vector<long long>(N - 1));for (int i = 0; i < N; i++){for (int j = 0; j < N - 1; j++){cin >> B[i][j];}}vector<vector<pair<int, long long>>> G(N * N + 1);for (int i = 0; i < N - 1; i++){for (int j = 0; j < N; j++){long long T = (H[i][j] + H[i + 1][j]) * (1 - (i + j) % 2 * 2);G[i * N + j].push_back(make_pair((i + 1) * N + j, abs(T) * A[i][j] + T));G[(i + 1) * N + j].push_back(make_pair(i * N + j, abs(T) * A[i][j] - T));}}for (int i = 0; i < N; i++){for (int j = 0; j < N - 1; j++){long long T = (H[i][j] + H[i][j + 1]) * (1 - (i + j) % 2 * 2);G[i * N + j].push_back(make_pair(i * N + j + 1, abs(T) * B[i][j] + T));G[i * N + j + 1].push_back(make_pair(i * N + j, abs(T) * B[i][j] - T));}}for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){if (S[i][j] == '?'){continue;}if (S[i][j] == '=' or ((S[i][j] == '-') ^ (i + j) % 2) == 0){G[i * N + j].push_back(make_pair(N * N, 0));}if (S[i][j] == '=' or ((S[i][j] == '-') ^ (i + j) % 2) == 1){G[N * N].push_back(make_pair(i * N + j, 0));}}}auto D = Dijkstra(G, N * N);int Q;cin >> Q;while (Q--){int R, C, E;cin >> R >> C >> E;R--;C--;if (H[R][C] + D[R * N + C] >= E){cout << "Yes" << endl;} else {cout << "No" << endl;}}}