結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-01-13 22:13:57 |
| 言語 | Perl (5.40.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,829 bytes |
| コンパイル時間 | 497 ms |
| コンパイル使用メモリ | 7,168 KB |
| 実行使用メモリ | 667,884 KB |
| 最終ジャッジ日時 | 2024-07-08 03:40:17 |
| 合計ジャッジ時間 | 7,178 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 WA * 2 |
| other | AC * 2 WA * 2 MLE * 1 -- * 35 |
コンパイルメッセージ
Main.pl syntax OK
ソースコード
# http://yukicoder.me/problems/17
use strict;
use warnings;
use 5.010;
use Data::Dumper;
my $goal = _read_line();
my $money = _read_line();
my $roads = _read_line();
my $map = read_map();
# 前処理終了。
# 解く
my $ans = solve($map, $money, $goal);
say $ans;
sub _read_line {
my $line = <STDIN>;
chomp($line);
return $line;
}
sub read_map {
my $s = [split(/ /, _read_line())];
my $t = [split(/ /, _read_line())];
my $y = [split(/ /, _read_line())];
my $m = [split(/ /, _read_line())];
my $ret = {};
for (my $i = 0 ; $i < @$s ; $i++) {
my $start = $s->[$i];
my $dest = $t->[$i];
$ret->{$start} ||= {};
$ret->{$start}->{$dest} = {
cost => $y->[$i],
dist => $m->[$i],
};
}
return $ret;
}
sub solve {
my ($map, $money, $goal) = @_;
my $cur = [
{
pos => 1,
cost => 0,
dist => 0,
}
];
my $res = [];
while (my $state = pop(@$cur)) {
while (my ($k, $v) = each(%{$map->{ $state->{ pos } }})) {
my $cost = $v->{ cost } + $state->{ cost };
my $dist = $v->{ dist } + $state->{ dist };
if ($k == $goal) {
push @$res, {
cost => $cost,
dist => $dist,
}
}
else {
push @$cur, {
pos => $k,
cost => $cost,
dist => $dist,
};
}
}
}
$res = [sort @$res];
return -1 if @$res == 0;
return -1 if $res->[0]->{cost} > $money;
return $res->[0]->{dist};
}