Submission #47306674


Source Code Expand

<?php
// 近いうちに動かすところにはできるだけ載せない
// 近いうちに動かすところの評価を非線形にする
// まとめて全部移動させるのではなく近いうちに動かす必要のあるものは分割して移動する
// 得点計算して乱択する
// さらに高速化する。累計で7倍ぐらい速くなった。
[$N, $M] = ints();
for($i = 0; $i < $M; $i++){
    $row = ints();
    $_stacks[] = $row;
    foreach($row as $c => $v){
        $_pos[$v] = [$i, $c];
    }
}
$ansArray = []; $powArray = [];
$time = microtime(true);
for($i = 0; $i < 200; $i++){
    $pi[$i] = 0.88 ** $i;
}
for($x = 0; microtime(true)-$time < 1.9; $x++){
    $stacks = $_stacks;
    $pos = $_pos;
    $pow = 0;
    $ans = [];
    $splitLimit = random_int(15, 20);// 17;
    for($i = 1; $i <= $N; $i++){
        [$r, $c] = $pos[$i];
        if(count($stacks[$r])!=$c+1){
            // 末尾の要素でなければ後ろのものを別のところによける
            $removeArray = [];
            $removeArray[] = $stacks[$r][$c+1];
            $pow++;
            $pow += count($stacks[$r])-$c-1;
            for($j = $c+2, $J = count($stacks[$r])-1; $j < $J; ++$j){
                if($stacks[$r][$j] < $i+$splitLimit){
                    $removeArray[] = $stacks[$r][$j+1];
                    $pow++;
                }
            }

            $removeArray = array_reverse($removeArray);
            foreach($removeArray as $remove){
                $counts = [];
                $I = [];
                for($j = 0; $j < 10; $j++){
                    $counts[$j] = random_int(0,100)*0.001;
                    $I[$j] = $j;
                }
                $D = 100;
                for($j = $i+1, $J = min($i+$D,$N); $j <= $J; ++$j){
                    $counts[$pos[$j][0]]+=$pi[$j-$i];
                }
                array_multisort($counts, $I);
                $j = $I[$I[0]==$r];
                $ans[] = [$remove, $j+1];
                $removed = array_splice($stacks[$r], $pos[$remove][1]);
                foreach($removed as $p => $num){
                    $pos[$num] = [$j, count($stacks[$j])+$p];
                }
                $stacks[$j] = array_merge($stacks[$j], $removed);
            }
        }
        array_pop($stacks[$r]);
        $ans[] = [$i, 0];
    }
    $ansArray[] = $ans;
    $powArray[] = $pow;
}
array_multisort($powArray, $ansArray);
foreach($ansArray[0] as $row){
    echo implode(" ", $row),"\n";
}
error_log("$x");

function qfind($n){
    global $pos;
    return $pos[$n];
}

function str(){return trim(fgets(STDIN));}
function ints($n = false){
  if($n===false){
    $str = trim(fgets(STDIN));if($str == '')return [];
    return array_map('intval',explode(' ',$str));
  }else{$ret = [];for($i = 0; $i < $n; $i++)foreach(array_map('intval',explode(' ',trim(fgets(STDIN)))) as $j => $v)$ret[$j][] = $v;return $ret;}
}
function int(){return intval(trim(fgets(STDIN)));}
function chmax(&$a,$b){if($a<$b){$a=$b;return 1;}return 0;}
function chmin(&$a,$b){if($a>$b){$a=$b;return 1;}return 0;}
function isqrt($n):int{$res=intval(sqrt($n))+1;while($res*$res>$n)$res--;return $res;}
function popcount($x){$c=0;while($x){$x&=$x-1;++$c;}return$c;}
function swap(&$a,&$b){$tmp=$a;$a=$b;$b=$tmp;}
function o(...$val){
  if(count($val)==1)$val=array_shift($val);
  echo debug_backtrace()[0]['line'].")";
  if(is_array($val)){
    if(count($val) == 0)echo "empty array\n";
    elseif(!is_array(current($val)))echo "array: ",implode(" ", addIndex($val)),"\n";
    else{
      echo "array:array\n";
      if(isCleanArray($val))foreach($val as $row)echo implode(" ", addIndex($row)),"\n";
      else foreach($val as $i => $row)echo "[".$i."] ".implode(" ", addIndex($row)),"\n";
    }
  }else echo $val."\n";
}
function addIndex($val){if(!isCleanArray($val)){$val = array_map(function($k, $v){return $k.":".$v;}, array_keys($val), $val);}return $val;}
function isCleanArray($array){$clean=true;$i = 0;foreach($array as $k=>$v){if($k != $i++)$clean = false;}return $clean;}
// 座圧対象の配列 -> [圧縮された配列,復元用のMap,圧縮用のMap]
function atsu($array){$a = array_flip($array);$fuku=array_flip($a);sort($fuku);$atsu = array_flip($fuku);foreach($array as $i=>$val)$array[$i]=$atsu[$val];return [$array, $fuku, $atsu];}
function atsu1($array){$a=array_flip($array);$fuku=array_flip($a);sort($fuku);array_unshift($fuku,0);array_unshift($fuku,0);unset($fuku[0]);$atsu=array_flip($fuku);foreach($array as $i=>$val)$array[$i]=$atsu[$val];return [$array, $fuku, $atsu];}
function median($a){sort($a);$n=count($a);return $n%2?$a[($n-1)/2]:($a[$n/2-1]+$a[$n/2])/2;}
function gcdAll($array){$gcd=$array[0];for($i=1,$I=count($array);$i<$I;++$i){$gcd=gcd($gcd,$array[$i]);}return $gcd;}
function gcd($m, $n){if(!$n)return $m;return gcd($n, $m % $n);}
function lcmAll($array){$lcm=$array[0];for($i=1,$I=count($array);$i<$I;++$i){$lcm=lcm($lcm,$array[$i]);}return $lcm;}
function lcm($a, $b) {return $a / gcd($a, $b) * $b;}
function loadTree($N = false){
  if($N === false)$N = $GLOBALS['N'];
  return loadGraph($N, $N-1);
}
function loadGraph($N = false, $M = false, $both = true){
  if($N === false)$N = $GLOBALS['N'];
  if($M === false)$M = $GLOBALS['M'];
  $G = array_fill(1, $N, []);
  for($i = 0; $i < $M; $i++){
    $values = ints();
    if(count($values) == 2){
      list($a, $b) = $values;
      if($both == 0){
        $G[$a][] = $b;
      }elseif($both == 1){
        $G[$a][] = $b;
        $G[$b][] = $a;
      }else{
        $G[$b][] = $a;
      }
    }else{
      list($a, $b, $d) = $values;
      if($both == 0){
        $G[$a][] = [$b, $d];
      }elseif($both == 1){
        $G[$a][] = [$b, $d];
        $G[$b][] = [$a, $d];
      }else{
        $G[$b][] = [$a, $d];
      }
    }
  }
  return $G;
}

Submission Info

Submission Time
Task A - Stack of Boxes
User yoichiro
Language PHP (php 8.2.8)
Score 1389017
Code Size 5960 Byte
Status AC
Exec Time 1926 ms
Memory 164712 KiB

Judge Result

Set Name test_ALL
Score / Max Score 1389017 / 1500000
Status
AC × 150
Set Name Test Cases
test_ALL test_0000.txt, test_0001.txt, test_0002.txt, test_0003.txt, test_0004.txt, test_0005.txt, test_0006.txt, test_0007.txt, test_0008.txt, test_0009.txt, test_0010.txt, test_0011.txt, test_0012.txt, test_0013.txt, test_0014.txt, test_0015.txt, test_0016.txt, test_0017.txt, test_0018.txt, test_0019.txt, test_0020.txt, test_0021.txt, test_0022.txt, test_0023.txt, test_0024.txt, test_0025.txt, test_0026.txt, test_0027.txt, test_0028.txt, test_0029.txt, test_0030.txt, test_0031.txt, test_0032.txt, test_0033.txt, test_0034.txt, test_0035.txt, test_0036.txt, test_0037.txt, test_0038.txt, test_0039.txt, test_0040.txt, test_0041.txt, test_0042.txt, test_0043.txt, test_0044.txt, test_0045.txt, test_0046.txt, test_0047.txt, test_0048.txt, test_0049.txt, test_0050.txt, test_0051.txt, test_0052.txt, test_0053.txt, test_0054.txt, test_0055.txt, test_0056.txt, test_0057.txt, test_0058.txt, test_0059.txt, test_0060.txt, test_0061.txt, test_0062.txt, test_0063.txt, test_0064.txt, test_0065.txt, test_0066.txt, test_0067.txt, test_0068.txt, test_0069.txt, test_0070.txt, test_0071.txt, test_0072.txt, test_0073.txt, test_0074.txt, test_0075.txt, test_0076.txt, test_0077.txt, test_0078.txt, test_0079.txt, test_0080.txt, test_0081.txt, test_0082.txt, test_0083.txt, test_0084.txt, test_0085.txt, test_0086.txt, test_0087.txt, test_0088.txt, test_0089.txt, test_0090.txt, test_0091.txt, test_0092.txt, test_0093.txt, test_0094.txt, test_0095.txt, test_0096.txt, test_0097.txt, test_0098.txt, test_0099.txt, test_0100.txt, test_0101.txt, test_0102.txt, test_0103.txt, test_0104.txt, test_0105.txt, test_0106.txt, test_0107.txt, test_0108.txt, test_0109.txt, test_0110.txt, test_0111.txt, test_0112.txt, test_0113.txt, test_0114.txt, test_0115.txt, test_0116.txt, test_0117.txt, test_0118.txt, test_0119.txt, test_0120.txt, test_0121.txt, test_0122.txt, test_0123.txt, test_0124.txt, test_0125.txt, test_0126.txt, test_0127.txt, test_0128.txt, test_0129.txt, test_0130.txt, test_0131.txt, test_0132.txt, test_0133.txt, test_0134.txt, test_0135.txt, test_0136.txt, test_0137.txt, test_0138.txt, test_0139.txt, test_0140.txt, test_0141.txt, test_0142.txt, test_0143.txt, test_0144.txt, test_0145.txt, test_0146.txt, test_0147.txt, test_0148.txt, test_0149.txt
Case Name Status Exec Time Memory
test_0000.txt AC 1920 ms 160476 KiB
test_0001.txt AC 1924 ms 159964 KiB
test_0002.txt AC 1923 ms 157472 KiB
test_0003.txt AC 1923 ms 159164 KiB
test_0004.txt AC 1923 ms 157496 KiB
test_0005.txt AC 1923 ms 161164 KiB
test_0006.txt AC 1924 ms 158172 KiB
test_0007.txt AC 1922 ms 160772 KiB
test_0008.txt AC 1923 ms 160632 KiB
test_0009.txt AC 1922 ms 159684 KiB
test_0010.txt AC 1922 ms 158304 KiB
test_0011.txt AC 1923 ms 162956 KiB
test_0012.txt AC 1925 ms 158652 KiB
test_0013.txt AC 1922 ms 161348 KiB
test_0014.txt AC 1923 ms 162116 KiB
test_0015.txt AC 1922 ms 157496 KiB
test_0016.txt AC 1923 ms 161316 KiB
test_0017.txt AC 1922 ms 163020 KiB
test_0018.txt AC 1922 ms 159532 KiB
test_0019.txt AC 1922 ms 158168 KiB
test_0020.txt AC 1923 ms 158792 KiB
test_0021.txt AC 1924 ms 161684 KiB
test_0022.txt AC 1921 ms 160504 KiB
test_0023.txt AC 1923 ms 159136 KiB
test_0024.txt AC 1923 ms 159800 KiB
test_0025.txt AC 1922 ms 158760 KiB
test_0026.txt AC 1921 ms 160352 KiB
test_0027.txt AC 1922 ms 158608 KiB
test_0028.txt AC 1921 ms 161460 KiB
test_0029.txt AC 1922 ms 158532 KiB
test_0030.txt AC 1922 ms 156684 KiB
test_0031.txt AC 1921 ms 158112 KiB
test_0032.txt AC 1924 ms 157724 KiB
test_0033.txt AC 1926 ms 160936 KiB
test_0034.txt AC 1922 ms 160436 KiB
test_0035.txt AC 1923 ms 157128 KiB
test_0036.txt AC 1922 ms 158072 KiB
test_0037.txt AC 1925 ms 160696 KiB
test_0038.txt AC 1924 ms 157436 KiB
test_0039.txt AC 1923 ms 164196 KiB
test_0040.txt AC 1923 ms 161564 KiB
test_0041.txt AC 1924 ms 161900 KiB
test_0042.txt AC 1921 ms 159444 KiB
test_0043.txt AC 1923 ms 160952 KiB
test_0044.txt AC 1923 ms 157152 KiB
test_0045.txt AC 1922 ms 160400 KiB
test_0046.txt AC 1921 ms 157876 KiB
test_0047.txt AC 1923 ms 156552 KiB
test_0048.txt AC 1922 ms 156408 KiB
test_0049.txt AC 1923 ms 159976 KiB
test_0050.txt AC 1923 ms 157636 KiB
test_0051.txt AC 1923 ms 161316 KiB
test_0052.txt AC 1922 ms 160464 KiB
test_0053.txt AC 1924 ms 158068 KiB
test_0054.txt AC 1922 ms 161084 KiB
test_0055.txt AC 1922 ms 159272 KiB
test_0056.txt AC 1922 ms 158348 KiB
test_0057.txt AC 1923 ms 158828 KiB
test_0058.txt AC 1922 ms 158452 KiB
test_0059.txt AC 1921 ms 157880 KiB
test_0060.txt AC 1923 ms 155744 KiB
test_0061.txt AC 1922 ms 159388 KiB
test_0062.txt AC 1921 ms 160068 KiB
test_0063.txt AC 1922 ms 161704 KiB
test_0064.txt AC 1924 ms 158044 KiB
test_0065.txt AC 1923 ms 159440 KiB
test_0066.txt AC 1922 ms 160540 KiB
test_0067.txt AC 1921 ms 159328 KiB
test_0068.txt AC 1923 ms 161868 KiB
test_0069.txt AC 1922 ms 158352 KiB
test_0070.txt AC 1922 ms 158884 KiB
test_0071.txt AC 1921 ms 160068 KiB
test_0072.txt AC 1921 ms 162524 KiB
test_0073.txt AC 1922 ms 159240 KiB
test_0074.txt AC 1922 ms 159528 KiB
test_0075.txt AC 1922 ms 161040 KiB
test_0076.txt AC 1924 ms 162260 KiB
test_0077.txt AC 1924 ms 162024 KiB
test_0078.txt AC 1922 ms 159596 KiB
test_0079.txt AC 1922 ms 156612 KiB
test_0080.txt AC 1922 ms 159872 KiB
test_0081.txt AC 1924 ms 160748 KiB
test_0082.txt AC 1925 ms 159360 KiB
test_0083.txt AC 1923 ms 159892 KiB
test_0084.txt AC 1924 ms 158868 KiB
test_0085.txt AC 1923 ms 160540 KiB
test_0086.txt AC 1922 ms 161576 KiB
test_0087.txt AC 1924 ms 161516 KiB
test_0088.txt AC 1922 ms 156128 KiB
test_0089.txt AC 1925 ms 158304 KiB
test_0090.txt AC 1925 ms 160004 KiB
test_0091.txt AC 1924 ms 159380 KiB
test_0092.txt AC 1921 ms 159832 KiB
test_0093.txt AC 1923 ms 160636 KiB
test_0094.txt AC 1923 ms 157808 KiB
test_0095.txt AC 1923 ms 160644 KiB
test_0096.txt AC 1922 ms 157476 KiB
test_0097.txt AC 1923 ms 159260 KiB
test_0098.txt AC 1922 ms 157640 KiB
test_0099.txt AC 1923 ms 158900 KiB
test_0100.txt AC 1923 ms 157460 KiB
test_0101.txt AC 1922 ms 160592 KiB
test_0102.txt AC 1921 ms 158608 KiB
test_0103.txt AC 1923 ms 158576 KiB
test_0104.txt AC 1922 ms 163472 KiB
test_0105.txt AC 1923 ms 160448 KiB
test_0106.txt AC 1922 ms 157808 KiB
test_0107.txt AC 1923 ms 160356 KiB
test_0108.txt AC 1922 ms 160764 KiB
test_0109.txt AC 1924 ms 159800 KiB
test_0110.txt AC 1924 ms 164712 KiB
test_0111.txt AC 1923 ms 161236 KiB
test_0112.txt AC 1922 ms 154772 KiB
test_0113.txt AC 1922 ms 156932 KiB
test_0114.txt AC 1923 ms 162336 KiB
test_0115.txt AC 1923 ms 161300 KiB
test_0116.txt AC 1922 ms 158304 KiB
test_0117.txt AC 1921 ms 158488 KiB
test_0118.txt AC 1921 ms 160228 KiB
test_0119.txt AC 1923 ms 159768 KiB
test_0120.txt AC 1923 ms 160152 KiB
test_0121.txt AC 1923 ms 161172 KiB
test_0122.txt AC 1922 ms 156664 KiB
test_0123.txt AC 1923 ms 156716 KiB
test_0124.txt AC 1921 ms 155576 KiB
test_0125.txt AC 1922 ms 162232 KiB
test_0126.txt AC 1922 ms 160692 KiB
test_0127.txt AC 1922 ms 158272 KiB
test_0128.txt AC 1924 ms 160360 KiB
test_0129.txt AC 1923 ms 163848 KiB
test_0130.txt AC 1923 ms 160588 KiB
test_0131.txt AC 1922 ms 156948 KiB
test_0132.txt AC 1923 ms 160044 KiB
test_0133.txt AC 1922 ms 160568 KiB
test_0134.txt AC 1922 ms 157652 KiB
test_0135.txt AC 1923 ms 158872 KiB
test_0136.txt AC 1923 ms 163216 KiB
test_0137.txt AC 1922 ms 161400 KiB
test_0138.txt AC 1922 ms 159304 KiB
test_0139.txt AC 1922 ms 159880 KiB
test_0140.txt AC 1923 ms 163196 KiB
test_0141.txt AC 1922 ms 161140 KiB
test_0142.txt AC 1923 ms 157268 KiB
test_0143.txt AC 1923 ms 159960 KiB
test_0144.txt AC 1921 ms 159216 KiB
test_0145.txt AC 1926 ms 160204 KiB
test_0146.txt AC 1922 ms 160296 KiB
test_0147.txt AC 1925 ms 162476 KiB
test_0148.txt AC 1923 ms 160004 KiB
test_0149.txt AC 1922 ms 159032 KiB