問題
解答
最初にコードを書いた時に、キャンペーンxの終了日
とキャンペーンx+1の開始日
を比較してました。それだとこっちのテストが通らなくて...
n = 3, l = [ 1, 3, 6 ], r = [ 8, 5, 9 ]
なのでキャンペーンごとの終了日だけに注目しました。終了日だけを昇順にして、キャンペーンを確認していく方針ですね。そうすると早い終了日を選択していくことになるので、できるだけ多くのキャンペーンに参加できます。
関数定義
<?php
function maxCam($x, $l, $r) {
$maxCam = 0;
$endTime = 0;
// カウント変数の初期化
// 終了日の初期化
array_multisort($r, $l);
// ここの操作を逆にしていたのでうまくいきませんでした。
for($i = 0; $i < $x; $i++) {
if($endTime < $l[$i]) {
// 前回のスケジュールが終わった日と、次のスケジュールの開始日を比較
$maxCam++;
$endTime = $r[$i];
// 終了日の更新
}
}
return $maxCam;
}
入力と出力
$n = trim(fgets(STDIN));
for($i = 0; $i < $n; $i++) {
list($a, $b) = explode(" ", trim(fgets(STDIN)));
$left[] = $a;
$right[] = $b;
}
echo maxCam($n, $left, $right);
?>