2016-06-06 4 views
-1

hackerrank 스크립트에서 작업 중이며 작은 입력에서는 작동하지만 배열에 대한 입력이 많으면 출력이 중단되고 에코가 작동하지 않습니다. 오류가없고 아무 것도 없습니다.출력이없는 PHP 명령 행 스크립트

$_fp = STDIN; 
fscanf($_fp,"%d",$n); 

$max = 0.0; 
$max_cnt = 0.0; 

$board = []; 

for ($i = 0; $i < $n; $i++) { 

    $points = explode(' ', fgets($_fp)); 

    $a = intval($points[0]); 
    $b = intval($points[1]); 

    runBoard2($a, $b); 

} 


function runBoard2 ($a, $b) { 
    global $board, $max, $max_cnt; 

    for($r = 0; $r < $a; $r++) { 

     for($c = 0; $c < $b; $c++) { 
      @$board[$r][$c] += 1; 
      $cellVal = $board[$r][$c]; 

      if ($cellVal > $max) { 
       $max = $cellVal; 
       $max_cnt = 1; 
      } elseif ($cellVal === $max) { 
       $max_cnt++; 
      } 
     } 
    } 
} 
echo $max_cnt; 

stdin.php :

2 
1000000 1000000 
1000000 1000000 

명령 줄 전화 :

3 
2 3 
3 7 
4 1 

는이 라인을 함께 할 수있는 뭔가가 생각 : stdin.php와

cat stdin.php | php rectangulargame.php 

작품 @$board[$r][$c] += 1; 마치 내가 tak @ 정의 해제 된 오프셋에 대한 알림을 숨기기 위해 @ 억제를 해제합니다. 메모리 부족 오류가 발생할 때까지 해당 메시지를 표시합니다. 그래서, 어떤 사람이 이것을 피하기 위해 리팩터링을해야하는지에 대한 제안을 가지고 있습니까?

행렬을 작성하지 않고 행과 열을 사용하여 계산할 수있는 더 많은 파고 및 발견 된 힌트가 PHP에서 내 머리를 감싸고 나면 매력적이고 빠르게 작동합니다.

검토 시간과 특히 의견을 보내 주신 모든 분들께 감사드립니다.

+1

'error_reporting (E_ALL); ini_set ('display_errors', '1'); ' – AbraCadaver

+0

@AbraCadaver 두어 단계 동안 동일한 과정을 거친 후 준비된 프롬프터로 새로운 라인을 제공합니다. – Geodin

+0

1,000,000 x 1,000,000 표를 생성 중입니다. 그것은 배열에있는 1,000000000000 개의 항목이며 왜 메모리가 부족한 지 궁금합니다. –

답변

0

그래서 솔루션은 리팩터링을 사용하여 행과 열 분과 최종 답으로 여러 행을 사용하여 계산했습니다.

관련 문제