1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Atcoder for PHP】二次元配列の標準入力について調べる。

Posted at

はじめまして
趣味的な動機でAtcoderを初めて1か月。全然わからない日々が続いております。実は今現在、パイザラーニングに逃げているのが現状だったりします。

さて、競プロ初心者に最大のネック、標準入力
これについて、いろいろと調べていこうと思っています。
まずは直近で悔しかった二次元配列の取得と出力をPHPにて調査してみました。
他の標準入力についても、今後まとめていこうと思っています。

#二次元配列の取得方法

入力例

x [0] [1] [2] [3]
[0] 1 2 3 4
[1] 5 6 7 8
[2] 9 10 11 12

###(1)データ数が分からないとき
こちらはパイザでも使える標準入力・・・など初心者向けに出てくるパターンです。
どんなデータがどれだけあるか分からないときは下記のコードを利用しましょう。

//1行づつ配列を取得
while ($line = fgets(STDIN)) {
    $tmp[] = trim($line);
}
// 1行目の配列をスペース区切りで取得
foreach ($tmp as $value) {
    $inp[] = explode(' ', $value);
}

//解説?
//whileで取得したデータ
echo $tmp[0];//出力結果:1 2 3 4
echo $tmp[1];//出力結果:5 6 7 8
//foreachで取得したデータ
echo $inputs[0][0]." ".$inputs[0][2]." ".$inputs[0][2]; 
//出力結果:1 2 3
echo $inputs[1][0]." ".$inputs[0][2]; 
//出力結果:5 7

###(2)データ数がわかるとき

入力例の最初の行にWとHが与えられる
H=3 W=4

x [0] [1] [2] [3]
[0] 3 4
[1] 1 2 3 4
[2] 5 6 7 8
[3] 9 10 11 12
fscanf(STDIN, '%d %d', $h, $w);//あるいはデータ数で指示
//二次元配列として取得([1]行目から取得)
for ($i = 0; $i < $h; $i++) {
    $m[] = explode(' ', trim(fgets(STDIN)));
}

#取得した2次元配列の出力

for( $k = 0; $k < $w; $k++ ) {
 for( $j = 0; $j < $h; $j++) {
         echo $m[$k][$j], ' ';
    }
    echo "\n";
}

//二次元配列の出力
for ($k = 0; $k < $w; $k++) {
    for ($j = 0; $j < $h; $j++) {
        echo $inp[$j][$k], ' ';
    }
    echo "\n";
}

//(1)を利用した場合、for文の前に下記2行
//$h=$inp[0][0] +1 ;//最初の行を犠牲にするので+1
//$w=$inp[0][1];
//のとき$j=1;とする。

他の出力方法についても今度調べてみよう。
そのうちスピードが速かった回答を分解して研究してみたい。

<?php
//1行目取得
list($h,$w)=explode(" ",trim(fgets(STDIN)));
$i=0;
while( $i<$h){
  $m[$i]=explode(" ",trim(fgets(STDIN)));
  ++$i;
}

//出力
$i=0;
while($i<$w){
  $ans=array();
  foreach($m as $v){
    $ans[]=$v[$i];
  }
  echo join(" ",$ans)."\n";
  ++$i;
}

むぅ?「join(" ",$ans)」???なんでこうなるんだ?
join・・・?

引き続き、他の標準入力についても、まとめていきたいと思っています。
PHPで競プロとかレアだもんね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?