結果
| 問題 | No.3664 Manhattan Circumcenter |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-08-30 15:57:49 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0) |
| 結果 |
AC
|
| 実行時間 | 1 ms / 2,000 ms |
| + 587µs | |
| コード長 | 3,618 bytes |
| 記録 | |
| コンパイル時間 | 4,729 ms |
| コンパイル使用メモリ | 380,528 KB |
| 実行使用メモリ | 6,400 KB |
| 最終ジャッジ日時 | 2026-08-30 15:58:00 |
| 合計ジャッジ時間 | 7,108 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 57 |
ソースコード
#include <bits/stdc++.h>
#include <iomanip>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vi = vector<int>;
using vl = vector<ll>;
#define rep3(i, a, b, c) for (ll i = (a); i < (b); i += (c))
#define rep2(i, a, b) rep3(i, a, b, 1)
#define rep1(i, n) rep2(i, 0, n)
#define rep0(n) rep1(aaaaa, n)
#define ov4(a, b, c, d, name, ...) name
#define rep(...) ov4(__VA_ARGS__, rep3, rep2, rep1, rep0)(__VA_ARGS__)
#define per(i, a, b) for (ll i = (a) - 1; i >= (b); i--)
#define fore(e, v) for (auto &&e : v)
#define all(a) begin(a), end(a)
#define sz(a) (ssize(a))
#define lb(v, x) (lower_bound(all(v), x) - begin(v))
#define eb emplace_back
template <typename T, typename S> bool chmin(T &a, const S &b) {
return a > b ? a = b, 1 : 0;
}
template <typename T, typename S> bool chmax(T &a, const S &b) {
return a < b ? a = b, 1 : 0;
}
const int INF = 1e9 + 100;
const ll INFL = 3e18 + 100;
#define i128 __int128_t
struct _ {
_() { cin.tie(0)->sync_with_stdio(0), cout.tie(0); }
} __;
int main() {
const int N = 3;
vector<pll> P(N);
vl X(N + 2), Y(N + 2);
rep(i, N) {
cin >> P[i].first >> P[i].second;
X[i] = P[i].first;
Y[i] = P[i].second;
}
X[N] = -INF, X[N + 1] = INF;
Y[N] = -INF, Y[N + 1] = INF;
sort(all(X)), sort(all(Y));
using pdd = pair<double, double>;
// (x+y,x-y)
set<pll> ans;
rep(i, sz(X) - 1) {
if (X[i] == X[i + 1])
continue;
rep(j, sz(Y) - 1) {
if (Y[j] == Y[j + 1])
continue;
cerr << format("[{} {}), [{} {})\n", X[i], X[i + 1], Y[j], Y[j + 1]);
set<ll> pxpy, mxpy, pxmy, mxmy;
for (auto [x, y] : P) {
if (X[i+1] <= x) {
if (Y[j+1] <= y) {
mxmy.insert(-x - y);
} else {
mxpy.insert(-x + y);
}
} else {
if (Y[j+1] <= y) {
pxmy.insert(+x - y);
} else {
pxpy.insert(+x + y);
}
}
}
cerr << format("{} {} {} {}\n", sz(pxpy), sz(pxmy), sz(mxpy), sz(mxmy));
if (sz(pxpy) >= 2 || sz(pxmy) >= 2 || sz(mxpy) >= 2 || sz(mxmy) >= 2) {
continue;
}
if ((pxpy.empty() && mxmy.empty()) || (pxmy.empty() && mxpy.empty())) {
cout << "-1\n";
return 0;
}
ll k2_pp = -INFL, k2_pm = -INFL;
if (!pxpy.empty() && !mxmy.empty()) {
k2_pp = -(*pxpy.begin()) - (*mxmy.begin());
}
if (!pxmy.empty() && !mxpy.empty()) {
k2_pm = -(*pxmy.begin()) - (*mxpy.begin());
}
if (k2_pp == -INFL && k2_pm == -INFL) {
cout << "-1\n";
return 0;
}
if (k2_pp != -INFL && k2_pm != -INFL && k2_pp != k2_pm) {
continue;
}
ll K2 = (k2_pp != -INFL ? k2_pp : k2_pm);
pll ret{
(pxpy.empty() ? -K2 - 2 * (*mxmy.begin()) : K2 + 2 * (*pxpy.begin())),
(pxmy.empty() ? -K2 - 2 * (*mxpy.begin())
: K2 + 2 * (*pxmy.begin()))};
if ((ret.first + ret.second) >= X[i] * 4 &&
(ret.first + ret.second) < X[i + 1] * 4 &&
(ret.first - ret.second) >= Y[j] * 4 &&
(ret.first - ret.second) < Y[j + 1] * 4) {
ans.insert(ret);
} else {
cerr << format("{} {}: [{} {}), [{} {})\n", ret.first, ret.second, X[i],
X[i + 1], Y[j], Y[j + 1]);
}
}
}
vector<pdd> out;
for (auto [p, m] : ans) {
out.push_back(pdd{(p + m) / 4.0, (p - m) / 4.0});
}
sort(all(out));
cout << setprecision(10) << fixed;
cout << sz(out) << '\n';
for (auto [x, y] : out) {
cout << x << ' ' << y << '\n';
}
}