結果
| 問題 |
No.2986 Permutation Puzzle
|
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 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);
}
}
ID 21712