LuoguP7072 [CSP-J2020] 直播獲獎 題解
阿新 • • 發佈:2021-12-16
LuoguP7072 [CSP-J2020] 直播獲獎 題解
個人的成績的時候邊將其分數放到相應的桶中,在按照分數 \(k\) 從大到小直接遍歷一遍,統計分數大於等於 \(k\) 的人的個數,直到這個數 \(\geqslant \max(1,\left\lfloor i\times w\%\right\rfloor)\) 為止,此時的 \(k\) 就是答案,輸出就好。
Update
- \(\texttt{2020.11.13}\) 修改了一個小細節。
- \(\texttt{2020.11.16}\) 修改了一個錯誤。
Content
有一場 \(n\) 個人的比賽,計劃獲獎人數為總人數的 \(w\%\)。第 \(i\) 個人的成績為 \(a_i\)。請求出在第 \(i\in[1,n]\) 個人出成績時的實時分數線。
資料範圍:\(n\leqslant 10^5,0\leqslant a_i\leqslant 600,1\leqslant w\leqslant 99\)。
Solution
考場沒想出來,果然還是我太菜。
考慮開個大小為 \(600\) 的桶,然後在讀入第 \(i\)
Code
int n, w, x, a[607]; int main() { scanf("%d%d", &n, &w); for(int i = 1; i <= n; ++i) { scanf("%d", &x); a[x]++; int pl = max(1, i * w / 100), num = 0; for(int j = 600; j >= 0; --j) { num += a[j]; if(num >= pl) {printf("%d ", j); break;} } } return 0; }