題目描述:
NOI2130 即將舉行。為了增加觀賞性,CCF 決定逐一評出每個選手的成績,並直播即時的獲獎分數線。本次競賽的獲獎率為 w%,即當前排名前 w% 的選手的最低成績就是即時的分數線。更具體地,若當前已評出了 p 個選手的成績,則當前計划獲獎人數為 max(1,⌊p∗w%⌋),其中 w 是獲獎百分比,floor⌊x⌋ 表示對 x 向下取整,max(x,y) 表示 x 和 y 中較大的數。如有選手成績相同,則所有成績並列的選手都能獲獎,因此實際獲獎人數可能比計划中多。作為評測組的技術人員,請你幫 CCF 寫一個直播程序。
輸入格式:
第一行有兩個整數 n, w。分別代表選手總數與獲獎率。第二行有 n 個整數,依次代表逐一評出的選手成績
輸出格式:
只有一行,包含 n 個非負整數,依次代表選手成績逐一評出后,即時的獲獎分數線。相鄰兩個整數間用一個空格分隔。
【樣例輸入1】
10 60
200 300 400 500 600 600 0 300 200 100
【樣例輸出1】
200 300 400 400 400 500 400 400 300 300
【樣例輸入2】
10 30
100 100 600 100 100 100 100 100 100 100
【樣例輸出2】
100 100 600 600 600 600 100 100 100 100
解析見代碼...
#include<bits/stdc++.h> using namespace std; int t[605]; int n,w; int main() { int x; cin>>n>>w; for(int i=1;i<=n;i++) { cin>>x; t[x]++; int sum=0; //從高到低遍歷分數,重點知識!!!! for(int j = 600; j >= 0; j--) { //累加人數,或者sum = sum + t[j]; sum += t[j]; //判斷人數是否滿足!! if(sum >= max(1, i * w / 100)) { cout<<j<<' '; //記得break掉!! break; } } } return 0; }
886下期見