結果
問題 |
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}; }