結果

問題 No.168 ものさし
ユーザー te-sh
提出日時 2016-09-07 16:56:05
言語 D
(dmd 2.109.1)
結果
AC  
実行時間 300 ms / 2,000 ms
コード長 1,539 bytes
コンパイル時間 975 ms
コンパイル使用メモリ 137,232 KB
実行使用メモリ 30,576 KB
最終ジャッジ日時 2024-06-12 04:13:22
合計ジャッジ時間 3,656 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 19
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

import std.algorithm, std.array, std.container, std.range, std.bitmanip;
import std.numeric, std.math, std.bigint, std.random, core.bitop;
import std.string, std.regex, std.conv, std.stdio, std.typecons;
class UnionFind {
size_t[] par;
this(size_t n) {
par = new size_t[](n);
par[] = size_t.max;
}
size_t find(size_t i) {
if (par[i] == size_t.max) {
return i;
} else {
par[i] = find(par[i]);
return par[i];
}
}
void unite(size_t i, size_t j) {
auto pi = find(i), pj = find(j);
if (pi != pj) par[pj] = pi;
}
}
struct point {
long x, y;
point opBinary(string op)(point rhs) {
static if (op == "+") return point(x + rhs.x, y + rhs.y);
else static if (op == "-") return point(x - rhs.x, y - rhs.y);
}
}
alias Tuple!(size_t, "i", size_t, "j", long, "len") bet;
void main()
{
auto n = readln.chomp.to!size_t;
auto pi = iota(n)
.map!(_ => readln.split.map!(to!long))
.map!(rd => point(rd[0], rd[1])).array;
bet[] bi;
foreach (i; 0..n - 1)
foreach (j; i + 1..n)
bi ~= bet(i, j, rulerLen(pi[i], pi[j]));
bi.sort!("a.len < b.len");
auto uf = new UnionFind(n);
foreach (b; bi) {
uf.unite(b.i, b.j);
if (uf.find(0) == uf.find(n - 1)) {
writeln(b.len);
break;
}
}
}
long rulerLen(point p1, point p2)
{
auto p = p1 - p2;
auto a = p.x ^^ 2 + p.y ^^ 2;
bool calc(long _, long b) {
return b ^^ 2 >= a;
}
return iota(10L, a.to!real.sqrt.to!long * 2, 10L).assumeSorted!(calc).upperBound(0).front;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0