結果
問題 | No.1 道のショートカット |
ユーザー | chrom_sh |
提出日時 | 2015-01-13 23:27:27 |
言語 | Perl (5.38.2) |
結果 |
MLE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 2,916 bytes |
コンパイル時間 | 54 ms |
コンパイル使用メモリ | 7,296 KB |
実行使用メモリ | 671,232 KB |
最終ジャッジ日時 | 2024-07-08 03:40:52 |
合計ジャッジ時間 | 9,106 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 15 ms
6,912 KB |
testcase_01 | AC | 15 ms
7,040 KB |
testcase_02 | AC | 14 ms
7,040 KB |
testcase_03 | AC | 14 ms
7,040 KB |
testcase_04 | AC | 14 ms
7,168 KB |
testcase_05 | AC | 16 ms
7,168 KB |
testcase_06 | AC | 15 ms
6,912 KB |
testcase_07 | AC | 16 ms
7,040 KB |
testcase_08 | AC | 41 ms
7,936 KB |
testcase_09 | AC | 25 ms
7,680 KB |
testcase_10 | AC | 43 ms
7,808 KB |
testcase_11 | AC | 920 ms
36,548 KB |
testcase_12 | AC | 464 ms
9,088 KB |
testcase_13 | AC | 229 ms
9,472 KB |
testcase_14 | AC | 16 ms
7,296 KB |
testcase_15 | AC | 15 ms
6,912 KB |
testcase_16 | AC | 18 ms
7,296 KB |
testcase_17 | AC | 15 ms
7,040 KB |
testcase_18 | AC | 15 ms
7,296 KB |
testcase_19 | AC | 15 ms
7,296 KB |
testcase_20 | AC | 30 ms
8,320 KB |
testcase_21 | AC | 15 ms
7,040 KB |
testcase_22 | AC | 14 ms
7,168 KB |
testcase_23 | MLE | - |
testcase_24 | -- | - |
testcase_25 | -- | - |
testcase_26 | -- | - |
testcase_27 | -- | - |
testcase_28 | -- | - |
testcase_29 | -- | - |
testcase_30 | -- | - |
testcase_31 | -- | - |
testcase_32 | -- | - |
testcase_33 | -- | - |
testcase_34 | -- | - |
testcase_35 | -- | - |
testcase_36 | -- | - |
testcase_37 | -- | - |
testcase_38 | -- | - |
testcase_39 | -- | - |
testcase_40 | -- | - |
testcase_41 | -- | - |
testcase_42 | -- | - |
testcase_43 | -- | - |
コンパイルメッセージ
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} ||= []; ## 入れたいものよりコストが安く、かつ短い物があるならば無視する my $skip = 0; for my $e (@{$ret->{ $start }->{ $dest }}) { if ($e->{ cost } < $y->[$i] and $e->{ dist } < $m->[$i]) { $skip = 1; last; } } next if $skip; push @{ $ret->{$start}->{$dest} }, { cost => $y->[$i], dist => $m->[$i], }; } return $ret; } sub solve { my ($map, $money, $goal) = @_; #die Dumper($map); my $cur = [ { pos => 1, cost => 0, dist => 0, } ]; my $res = []; while (my $state = pop(@$cur)) { while (my ($k, $v_array) = each(%{$map->{ $state->{ pos } }})) { for my $v (@$v_array) { my $cost = $v->{ cost } + $state->{ cost }; my $dist = $v->{ dist } + $state->{ dist }; next if ($cost > $money); if ($k == $goal) { push @$res, { cost => $cost, dist => $dist, }; next; } ## 同じ位置で、コストも安く、距離も短いものがあるならば、入れない if (has_reasonable($cur, $k, $cost, $dist)) { next; } push @$cur, { pos => $k, cost => $cost, dist => $dist, }; } } } $res = [sort {$a->{dist} <=> $b->{dist}} @$res]; return -1 if @$res == 0; return $res->[0]->{dist}; } sub has_reasonable { my ($cur, $k, $cost, $dist) = @_; for my $e (@$cur) { next if $e->{ pos } != $k; return 1 if ($e->{ cost } < $cost and $e->{ dist } < $dist); } }