結果
問題 | No.1380 Borderline |
ユーザー |
![]() |
提出日時 | 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/nodeimport * 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;// 初めて条件を満たすものが答えなのであとはループを回さない(回すと条件を満たすものがすべて出力されてしまう)}}