結果
| 問題 | No.2354 Poor Sight in Winter |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-11-11 15:09:39 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 99 ms / 2,000 ms |
| + 325µs | |
| コード長 | 1,734 bytes |
| 記録 | |
| コンパイル時間 | 1,532 ms |
| コンパイル使用メモリ | 197,828 KB |
| 実行使用メモリ | 9,872 KB |
| 最終ジャッジ日時 | 2026-11-11 15:09:43 |
| 合計ジャッジ時間 | 4,219 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
#include <cstdlib>
#include <iostream>
#include <queue>
#include <utility>
#include <vector>
using namespace std;
using i64 = long long;
constexpr int V = 1e5;
constexpr i64 INF = 0x3f3f3f3f3f3f3f3f;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int m, k;
cin >> m >> k;
vector<pair<int, int>> pt(m + 2);
for (auto& [x, y] : pt)
cin >> x >> y;
auto get_dist = [&](const pair<int, int>& from, const pair<int, int>& to, int step) {
auto [x1, y1] = from;
auto [x2, y2] = to;
return step == 0 ? (from == to ? 0 : INF) : (abs(x1 - x2) + abs(y1 - y2) - 1) / step;
};
auto check = [&](int ans) {
vector<vector<int>> edges(m + 2, vector<int>(m + 2));
for (int i = 0; i <= m + 1; ++i) {
for (int j = i + 1; j <= m + 1; ++j)
edges[i][j] = edges[j][i] = get_dist(pt[i], pt[j], ans);
}
vector<i64> dist(m + 2, INF);
priority_queue<pair<i64, int>> nodes;
nodes.emplace(dist[0] = 0, 0);
while (!nodes.empty()) {
auto [dis, u] = nodes.top();
nodes.pop();
dis = -dis;
if (dis != dist[u])
continue;
for (int v = 0; v <= m + 1; ++v) {
if (dist[v] > dis + edges[u][v]) {
dist[v] = dis + edges[u][v];
nodes.emplace(-dist[v], v);
}
}
}
return dist[1] <= k;
};
int l = 1, r = V << 1;
while (l < r) {
int mid = l + ((r - l) >> 1);
if (check(mid))
r = mid;
else
l = mid + 1;
}
cout << l << endl;
return 0;
}
vjudge1