結果
問題 |
No.2986 Permutation Puzzle
|
ユーザー |
![]() |
提出日時 | 2024-12-31 02:50:28 |
言語 | Raku (rakudo v2024.12) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,804 bytes |
コンパイル時間 | 1,046 ms |
コンパイル使用メモリ | 151,964 KB |
実行使用メモリ | 342,296 KB |
最終ジャッジ日時 | 2024-12-31 02:51:59 |
合計ジャッジ時間 | 90,187 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 TLE * 1 |
other | AC * 23 TLE * 17 |
コンパイルメッセージ
Syntax OK
ソースコード
sub issame($n, @b, @a, @icol, @irow) { for ( 1 .. $n ) -> $r { for ( 1 .. $n ) -> $c { if ( @b[$r-1][$c-1] != @a[@irow[$r-1]-1][@icol[$c-1]-1]) { return 0; } } } return 1; } sub search($n,@b,$k,@a,@icol,@irow,@ops,@p) { if ( $k == 0 ) { return issame($n, @b, @a, @icol, @irow); } my @itmp = 1 .. $n; for ( 1 .. (2*$n) ) -> $op { @ops[$k-1] = $op; if ( $op <= $n ) { for ( 1 .. $n ) -> $r { @p[$k-1][$r-1] = @a[@irow[$r-1]-1][@icol[$op-1]-1]; } for ( 1 .. $n ) -> $e { @itmp[ @p[$k-1][$e-1]-1 ] = @icol[$e-1]; } if ( search($n, @b, $k-1, @a, @itmp, @irow, @ops, @p) ) { return 1; } } else { for ( 1 .. $n ) -> $c { @p[$k-1][$c-1] = @a[@irow[$op-1-$n]-1][@icol[$c-1]-1]; } for ( 1 .. $n ) -> $e { @itmp[ @p[$k-1][$e-1]-1 ] = @irow[$e-1]; } if ( search($n, @b, $k-1, @a, @icol, @itmp, @ops, @p) ) { return 1; } } } return 0; } my @words = words.slice(0..1000).map({ $_-0 }); my ( $n , $k ) = @words[0..1]; my @a = ( 1 .. $n ).map({ @words[$_*$n-$n+2..$_*$n+2-1] }); my @b = ( 1 .. $n ).map({ @words[$_*$n-$n+$n*$n+2..$_*$n+$n*$n+2-1] }); my @icol = 1 .. $n; my @irow = 1 .. $n; my @ops = 1 .. $k; my @p = ( 1 .. $k ).map({ my @x = 1 .. $n; @x }) ; search($n, @b, $k, @a, @icol, @irow, @ops, @p); my @ans = (); for ( 1 .. $k ) -> $j { my $op = @ops[$j-1]; my @w = @p[$j-1][0..$n-1]; my @t = 1 .. $n; my $z = ($op-1) % $n; while (1) { for ( 1 .. $n ) -> $i { @t[@p[$j-1][$i-1]-1] = @w[$i-1]; } if ( join("",@t) eq join("",@p[$j-1][0..$n-1]) ) { last; } $z = @p[$j-1][$z]-1; if ( $op <= $n ) { push(@ans, $z+1); } else { push(@ans, $z+1+$n); } @w = @t; } } say @ans.Int; for @ans -> $op { if ($op <= $n) { say "C " ~ ($op); } else { say "R " ~ ($op-$n); } }