Submission #59654405
Source Code Expand
<?php
[$N] = ints();
for($i = 0; $i < $N; $i++)[$X1[], $Y1[]] = ints();
for($i = 0; $i < $N; $i++)[$X2[], $Y2[]] = ints();
$maxScore = 0;
$bestSize = 0;
for($split = 1; $split <= 20; $split++){
$score = 0;
unset($used, $added, $done);
$size = floor(100000/$split);
$map = array_fill(0, $split, array_fill(0, $split, 0));
$added = array_fill(0, $split, array_fill(0, $split, " "));
for($i = 0; $i < $N; $i++)$map[intdiv($X1[$i],$size)][intdiv($Y1[$i],$size)]++;
for($i = 0; $i < $N; $i++)$map[intdiv($X2[$i],$size)][intdiv($Y2[$i],$size)]--;
//o($map);
foreach($map as $x => $row){
foreach($row as $y => $v){
$map2[$x][$y] = $v > 0 ? intdiv($v, 100)+1 : 0;
}
}
$max = 0;
$maxX = 0; $maxY = 0;
for($i = 0; $i < $split; $i++){
for($j = 0; $j < $split; $j++){
if(chmax($max, $map[$i][$j])){
$maxX = $i;
$maxY = $j;
}
}
}
$xy = [[-1,0],[1,0],[0,-1],[0,1]];
$length = 4*$size;
$pq = new SplPriorityQueue();
$used[$maxX][$maxY] = true;
foreach($xy as list($dx, $dy)){
if(isset($done[$maxX+$dx][$maxY+$dy]))continue;
$done[$maxX+$dx][$maxY+$dy] = true;
if(isset($map[$maxX+$dx][$maxY+$dy])){
$pq->insert([$maxX+$dx, $maxY+$dy], $map[$maxX+$dx][$maxY+$dy]);
}
}
while($pq->valid()){
[$x, $y] = $pq->extract();
$filledCellCountInAdjecentArea = 0;
foreach($xy as list($dx, $dy)){
if(isset($added[$x+$dx][$y+$dy]) && $added[$x+$dx][$y+$dy]===true)$filledCellCountInAdjecentArea++;
}
if($filledCellCountInAdjecentArea == 1){
$length += 2*$size;
}elseif($filledCellCountInAdjecentArea == 3){
$length -= 2*$size;
}
if($length>400000)break;
$added[$x][$y] = true;
$score += $map[$x][$y];
foreach($xy as list($dx, $dy)){
if(isset($done[$x+$dx][$y+$dy]))continue;
$done[$x+$dx][$y+$dy] = true;
if(($map2[$x+$dx][$y+$dy]??0)>0){
$pq->insert([$x+$dx, $y+$dy], $map[$x+$dx][$y+$dy]);
}
}
}
// $addedで" "が1に囲われている場所があればNG
// $addedを上下左右1マス拡張する
$added2 = array_fill(0, $split+2, array_fill(0, $split+2, ' '));
for($i = 0; $i < $split; $i++){
for($j = 0; $j < $split; $j++){
$added2[$i+1][$j+1] = $added[$i][$j];
}
}
//o($added2);
// added2 を外から幅深さ優先探索で" "を1に変えていく
$xy = [[-1,0],[1,0],[0,-1],[0,1]];
$done = array_fill(0, $split+2, array_fill(0, $split+2, false));
$done[0] = $done[$split+1] = array_fill(0, $split+2, true);
foreach($done as $row)$row[0] = $row[$split+1] = true;
$done[1][1] = true;
$queue = new SplQueue();
$queue->enqueue([1,1]);
while(!$queue->isEmpty()){
[$x, $y] = $queue->dequeue();
foreach($xy as list($dx, $dy)){
if(($added2[$x+$dx][$y+$dy]??1) === ' '){
$added2[$x+$dx][$y+$dy] = 1;
$queue->enqueue([$x+$dx, $y+$dy]);
}
}
}
//o($added2);
// added2 の " " の数を数える
$voidCount = 0;
for($i = 0; $i < $split+2; $i++){
for($j = 0; $j < $split+2; $j++){
if($added2[$i][$j] === ' ')$voidCount++;
}
}
if($voidCount > 0){
break;
}
if(chmax($maxScore, $score)){
$ans = $added;
$bestSize = $size;
}
}
error_log(strval($maxScore));
$N = 0;
$size = $bestSize;
//o($ans);
//exit;
foreach($ans as $x => $row){
foreach($row as $y => $v){
if($v === true){//今のセルが使っていて
if(($ans[$x-1][$y]??" ") === " "){//左が使っていない
$line[$x*$size][$y*$size] = [$x*$size, $y*$size+$size];$N++;
$cx = $x*$size;
$cy = $y*$size;
}
if(($ans[$x+1][$y]??" ") === " "){//右が使っていない
$line[$x*$size+$size][$y*$size+$size] = [$x*$size+$size, $y*$size];$N++;
}
if(($ans[$x][$y-1]??" ") === " "){//上が使っていない
$line[$x*$size+$size][$y*$size] = [$x*$size, $y*$size];$N++;
}
if(($ans[$x][$y+1]??" ") === " "){//下が使っていない
$line[$x*$size][$y*$size+$size] = [$x*$size+$size, $y*$size+$size];$N++;
}
}
}
}
echo $N, "\n";
//o($cy);
for($i = 0; $i < $N; $i++){
echo $cx, " ", $cy, "\n";
[$cx, $cy] = $line[$cx][$cy];
}
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);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;}
Submission Info
| Submission Time | |
|---|---|
| Task | A - Purse Seine Fishing |
| User | yoichiro |
| Language | PHP (php 8.2.8) |
| Score | 370266 |
| Code Size | 7251 Byte |
| Status | AC |
| Exec Time | 30 ms |
| Memory | 22704 KiB |
Judge Result
| Set Name | test_ALL | ||
|---|---|---|---|
| Score / Max Score | 370266 / 750000 | ||
| Status |
|
| 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 | 20 ms | 21784 KiB |
| test_0001.txt | AC | 27 ms | 21580 KiB |
| test_0002.txt | AC | 24 ms | 21776 KiB |
| test_0003.txt | AC | 28 ms | 21828 KiB |
| test_0004.txt | AC | 20 ms | 21700 KiB |
| test_0005.txt | AC | 28 ms | 21796 KiB |
| test_0006.txt | AC | 21 ms | 21716 KiB |
| test_0007.txt | AC | 24 ms | 21648 KiB |
| test_0008.txt | AC | 28 ms | 21744 KiB |
| test_0009.txt | AC | 20 ms | 21868 KiB |
| test_0010.txt | AC | 28 ms | 21704 KiB |
| test_0011.txt | AC | 21 ms | 21584 KiB |
| test_0012.txt | AC | 26 ms | 22156 KiB |
| test_0013.txt | AC | 24 ms | 22316 KiB |
| test_0014.txt | AC | 24 ms | 22308 KiB |
| test_0015.txt | AC | 28 ms | 22340 KiB |
| test_0016.txt | AC | 23 ms | 22228 KiB |
| test_0017.txt | AC | 29 ms | 22292 KiB |
| test_0018.txt | AC | 23 ms | 22340 KiB |
| test_0019.txt | AC | 28 ms | 22392 KiB |
| test_0020.txt | AC | 25 ms | 22524 KiB |
| test_0021.txt | AC | 25 ms | 22064 KiB |
| test_0022.txt | AC | 29 ms | 22316 KiB |
| test_0023.txt | AC | 22 ms | 22116 KiB |
| test_0024.txt | AC | 28 ms | 22288 KiB |
| test_0025.txt | AC | 24 ms | 22348 KiB |
| test_0026.txt | AC | 21 ms | 22400 KiB |
| test_0027.txt | AC | 23 ms | 22004 KiB |
| test_0028.txt | AC | 29 ms | 22104 KiB |
| test_0029.txt | AC | 23 ms | 22448 KiB |
| test_0030.txt | AC | 29 ms | 22580 KiB |
| test_0031.txt | AC | 24 ms | 22324 KiB |
| test_0032.txt | AC | 28 ms | 22204 KiB |
| test_0033.txt | AC | 26 ms | 22324 KiB |
| test_0034.txt | AC | 22 ms | 22512 KiB |
| test_0035.txt | AC | 26 ms | 22356 KiB |
| test_0036.txt | AC | 23 ms | 22488 KiB |
| test_0037.txt | AC | 25 ms | 22012 KiB |
| test_0038.txt | AC | 23 ms | 22068 KiB |
| test_0039.txt | AC | 23 ms | 22424 KiB |
| test_0040.txt | AC | 22 ms | 22408 KiB |
| test_0041.txt | AC | 27 ms | 22152 KiB |
| test_0042.txt | AC | 21 ms | 22436 KiB |
| test_0043.txt | AC | 28 ms | 22272 KiB |
| test_0044.txt | AC | 24 ms | 22180 KiB |
| test_0045.txt | AC | 22 ms | 22228 KiB |
| test_0046.txt | AC | 23 ms | 22020 KiB |
| test_0047.txt | AC | 22 ms | 22408 KiB |
| test_0048.txt | AC | 24 ms | 22360 KiB |
| test_0049.txt | AC | 22 ms | 22352 KiB |
| test_0050.txt | AC | 23 ms | 22584 KiB |
| test_0051.txt | AC | 25 ms | 22260 KiB |
| test_0052.txt | AC | 29 ms | 22436 KiB |
| test_0053.txt | AC | 25 ms | 22196 KiB |
| test_0054.txt | AC | 26 ms | 22280 KiB |
| test_0055.txt | AC | 21 ms | 22212 KiB |
| test_0056.txt | AC | 23 ms | 22224 KiB |
| test_0057.txt | AC | 25 ms | 22320 KiB |
| test_0058.txt | AC | 21 ms | 22308 KiB |
| test_0059.txt | AC | 23 ms | 22392 KiB |
| test_0060.txt | AC | 22 ms | 22324 KiB |
| test_0061.txt | AC | 24 ms | 22392 KiB |
| test_0062.txt | AC | 24 ms | 22200 KiB |
| test_0063.txt | AC | 28 ms | 22360 KiB |
| test_0064.txt | AC | 24 ms | 22380 KiB |
| test_0065.txt | AC | 23 ms | 22016 KiB |
| test_0066.txt | AC | 29 ms | 22492 KiB |
| test_0067.txt | AC | 26 ms | 22420 KiB |
| test_0068.txt | AC | 28 ms | 22436 KiB |
| test_0069.txt | AC | 22 ms | 22348 KiB |
| test_0070.txt | AC | 24 ms | 22380 KiB |
| test_0071.txt | AC | 23 ms | 22036 KiB |
| test_0072.txt | AC | 22 ms | 22556 KiB |
| test_0073.txt | AC | 28 ms | 22508 KiB |
| test_0074.txt | AC | 22 ms | 22164 KiB |
| test_0075.txt | AC | 21 ms | 22432 KiB |
| test_0076.txt | AC | 22 ms | 22400 KiB |
| test_0077.txt | AC | 23 ms | 22408 KiB |
| test_0078.txt | AC | 27 ms | 22476 KiB |
| test_0079.txt | AC | 24 ms | 22460 KiB |
| test_0080.txt | AC | 22 ms | 22408 KiB |
| test_0081.txt | AC | 21 ms | 22492 KiB |
| test_0082.txt | AC | 23 ms | 22348 KiB |
| test_0083.txt | AC | 21 ms | 22428 KiB |
| test_0084.txt | AC | 28 ms | 22296 KiB |
| test_0085.txt | AC | 29 ms | 22420 KiB |
| test_0086.txt | AC | 24 ms | 22324 KiB |
| test_0087.txt | AC | 25 ms | 22228 KiB |
| test_0088.txt | AC | 26 ms | 22360 KiB |
| test_0089.txt | AC | 22 ms | 22460 KiB |
| test_0090.txt | AC | 23 ms | 22476 KiB |
| test_0091.txt | AC | 29 ms | 22372 KiB |
| test_0092.txt | AC | 25 ms | 22608 KiB |
| test_0093.txt | AC | 22 ms | 22360 KiB |
| test_0094.txt | AC | 21 ms | 22396 KiB |
| test_0095.txt | AC | 22 ms | 22548 KiB |
| test_0096.txt | AC | 25 ms | 22280 KiB |
| test_0097.txt | AC | 24 ms | 22348 KiB |
| test_0098.txt | AC | 21 ms | 22120 KiB |
| test_0099.txt | AC | 23 ms | 22300 KiB |
| test_0100.txt | AC | 23 ms | 22176 KiB |
| test_0101.txt | AC | 28 ms | 22580 KiB |
| test_0102.txt | AC | 25 ms | 22496 KiB |
| test_0103.txt | AC | 24 ms | 22220 KiB |
| test_0104.txt | AC | 21 ms | 22152 KiB |
| test_0105.txt | AC | 25 ms | 22404 KiB |
| test_0106.txt | AC | 28 ms | 22372 KiB |
| test_0107.txt | AC | 27 ms | 22340 KiB |
| test_0108.txt | AC | 28 ms | 22368 KiB |
| test_0109.txt | AC | 22 ms | 22476 KiB |
| test_0110.txt | AC | 24 ms | 22148 KiB |
| test_0111.txt | AC | 26 ms | 22436 KiB |
| test_0112.txt | AC | 21 ms | 22332 KiB |
| test_0113.txt | AC | 26 ms | 22464 KiB |
| test_0114.txt | AC | 30 ms | 22704 KiB |
| test_0115.txt | AC | 23 ms | 22188 KiB |
| test_0116.txt | AC | 26 ms | 22380 KiB |
| test_0117.txt | AC | 22 ms | 22404 KiB |
| test_0118.txt | AC | 28 ms | 22108 KiB |
| test_0119.txt | AC | 28 ms | 22420 KiB |
| test_0120.txt | AC | 25 ms | 22476 KiB |
| test_0121.txt | AC | 23 ms | 22152 KiB |
| test_0122.txt | AC | 23 ms | 22456 KiB |
| test_0123.txt | AC | 27 ms | 22020 KiB |
| test_0124.txt | AC | 21 ms | 22048 KiB |
| test_0125.txt | AC | 28 ms | 22308 KiB |
| test_0126.txt | AC | 29 ms | 22476 KiB |
| test_0127.txt | AC | 25 ms | 22436 KiB |
| test_0128.txt | AC | 27 ms | 22336 KiB |
| test_0129.txt | AC | 24 ms | 22208 KiB |
| test_0130.txt | AC | 24 ms | 22524 KiB |
| test_0131.txt | AC | 23 ms | 22000 KiB |
| test_0132.txt | AC | 22 ms | 22400 KiB |
| test_0133.txt | AC | 22 ms | 22584 KiB |
| test_0134.txt | AC | 22 ms | 22284 KiB |
| test_0135.txt | AC | 28 ms | 22080 KiB |
| test_0136.txt | AC | 24 ms | 22452 KiB |
| test_0137.txt | AC | 25 ms | 22656 KiB |
| test_0138.txt | AC | 22 ms | 22232 KiB |
| test_0139.txt | AC | 28 ms | 22280 KiB |
| test_0140.txt | AC | 23 ms | 22504 KiB |
| test_0141.txt | AC | 25 ms | 22404 KiB |
| test_0142.txt | AC | 23 ms | 22552 KiB |
| test_0143.txt | AC | 20 ms | 22452 KiB |
| test_0144.txt | AC | 23 ms | 22500 KiB |
| test_0145.txt | AC | 29 ms | 22112 KiB |
| test_0146.txt | AC | 25 ms | 22464 KiB |
| test_0147.txt | AC | 28 ms | 22128 KiB |
| test_0148.txt | AC | 23 ms | 22348 KiB |
| test_0149.txt | AC | 22 ms | 22564 KiB |