PHPで回答。コード公開可とのことなので復習も兼ねて共有します。
問題文
解答例1
<?php
[$n, $m] = explode(" " , rtrim(fgets(STDIN))); //配列の短縮記法により複数の変数に一括代入
$array_a = explode(" " , rtrim(fgets(STDIN))); //配列A
$array_b = explode(" " , rtrim(fgets(STDIN))); //配列B
$index = 0; //配列Aから要素を1つずつ取り出すためのインデックス番号
foreach($array_b as $b){
for($i = 0; $i < $b; $i++){ //各要素について$b(M)回for文を回す
echo $array_a[$index]; //変数$indexはforeachの外にあるのでリセットされない
if($i + 1 == $b){
echo "\n"; //行の終点なら、改行する
}else{
echo " "; //行の終点でなければ、半角スペースを出力
}
$index += 1; //インデックス番号を更新
}
}
?>
解答例2
<?php
[$n, $m] = explode(" " , rtrim(fgets(STDIN))); //一括代入
$array_a = explode(" " , rtrim(fgets(STDIN))); //配列A
$array_b = explode(" " , rtrim(fgets(STDIN))); //配列B
$start = 0; //行の始点を設定
for($i = 0; $i < $m; $i++){ //for文をM回(配列Bの要素数分)回す
$end = $start + $array_b[$i] - 1; //行の終点を設定(最初は配列Bの1つ目の要素数、インデックス番号と比較するため-1)
for($j = $start; $j <= $end; $j++){ //行の始点(最初は0)から終点まで
echo $array_a[$j]; //配列Aから1つずつ要素を取り出し出力していく
if($j < $end){
echo " "; //行の終点でなければ、半角スペースを出力
}else{
echo "\n"; //行の終点ならば、改行する
}
}
$start = $end + 1; //始点を更新
}
?>