結果
問題 |
No.2897 2集合間距離
|
ユーザー |
![]() |
提出日時 | 2024-09-21 15:27:04 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,436 bytes |
コンパイル時間 | 1,930 ms |
コンパイル使用メモリ | 199,552 KB |
最終ジャッジ日時 | 2025-02-24 11:16:43 |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 21 WA * 3 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll = long long; #define ALL(v) v.begin(),v.end() #define dbg(x) cerr << #x << ": " << (x) << endl; #define MAX (1000) int N,M; vector<bitset<MAX>> P(MAX),Q(MAX); int main() { cin >> N; for (int i = 0; i < N; ++i) { int x,y; cin >> x >> y; P[y].set(x); } cin >> M; for (int i = 0; i < N; ++i) { int x,y; cin >> x >> y; Q[y].set(x); } int ans = 1e9; vector dp(MAX, vector<int>(MAX, 1e9)); for (int i = 0; i < MAX; ++i) { for (int j = 0; j < MAX; ++j) { if (i > 0) dp[i][j] = min(dp[i][j], dp[i-1][j] + 1); if (j > 0) dp[i][j] = min(dp[i][j], dp[i][j-1] + 1); if (Q[i].test(j)) { dp[i][j] = 0; } if (P[i].test(j)) { ans = min(ans, dp[i][j]); } } } for (int i = 0; i < MAX; ++i) { for (int j = 0; j < MAX; ++j) { dp[i][j] = 1e9; } } for (int i = MAX-1; i >= 0; --i) { for (int j = MAX-1; j >= 0; --j) { if (i < MAX-1) dp[i][j] = min(dp[i][j], dp[i+1][j] + 1); if (j < MAX-1) dp[i][j] = min(dp[i][j], dp[i][j+1] + 1); if (Q[i].test(j)) { dp[i][j] = 0; } if (P[i].test(j)) { ans = min(ans, dp[i][j]); } } } cout << ans << '\n'; }