結果
| 問題 |
No.1380 Borderline
|
| コンテスト | |
| ユーザー |
ose20
|
| 提出日時 | 2021-03-18 11:25:41 |
| 言語 | TypeScript (5.7.2) |
| 結果 |
AC
|
| 実行時間 | 72 ms / 2,000 ms |
| コード長 | 1,681 bytes |
| コンパイル時間 | 8,192 ms |
| コンパイル使用メモリ | 228,972 KB |
| 実行使用メモリ | 43,392 KB |
| 最終ジャッジ日時 | 2024-12-31 16:35:00 |
| 合計ジャッジ時間 | 12,745 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 41 |
ソースコード
// npm install --save-dev @types/node
import * as fs from 'fs';
const input = fs.readFileSync('/dev/stdin', 'utf8');
const nlarray = input.split('\n');
const NKarray = nlarray[0].split(' ');
const N = parseInt(NKarray[0]);
const K = parseInt(NKarray[1]);
const parray = nlarray[1].split(' ');
const n_parray = parray.map(Number);
n_parray.sort(
function(a, b) {
if (a < b) return -1;
if (a > b) return 1;
return 0;
}
);
// ここから違うコード
// pass[i] := ボーダーを i 点としたときの合格者数
let pass: number[] = [];
// 全員が 400 点をとって、かつ定員が N より小さい場合に対応するため
// ボーダーは 401 点まで考える (pi <= 400 なので pass[401] は必ず 0 になる)
for(let border = 0; border <= 401; border++) {
let pass_num = 0;
for (let j = 0; j < N; j++) {
if(n_parray[j] >= border) {
// もし j さんの点数が border 以上だったら
pass_num += 1;
}
}
// ボーダーが border 点の時の合格者人数は調べ終わったので配列に追加
pass.push(pass_num);
}
// ボーダーをあげればあげるほど合格者は少なくなっていくので
// pass[0] >= pass [1] >= ... >= pass[400] が成り立っているはず
// 答えは、pass[i] を i が小さい順に見ていって
// 初めて合格者数が k 以下になる時の合格者数が答え
for(let i = 0; i <= 401; i++) {
if(pass[i] <= K) {
console.log(pass[i]);
break;
// 初めて条件を満たすものが答えなのであとはループを回さない(回すと条件を満たすものがすべて出力されてしまう)
}
}
ose20