某校的慣例是在每學期的期末考試之後發放獎學金。發放的獎學金共有五種,獲取的條件各自不同:
2) 五四獎學金,每人4000元,期末平均成績高於85分(>85),並且班級評議成績高於80分(>80)的學生均可獲得;
3) 成績優秀獎,每人2000元,期末平均成績高於90分(>90)的學生均可獲得;
4) 西部獎學金,每人1000元,期末平均成績高於85分(>85)的西部省份學生均可獲得;
5) 班級貢獻獎,每人850元,班級評議成績高於80分(>80)的學生幹部均可獲得;
只要符合條件就可以得獎,每項獎學金的獲獎人數沒有限制,每名學生也可以同時獲得多項獎學金。例如姚林的期末平均成績是87分,班級評議成績82分,同時他還是一位學生幹部,那麼他可以同時獲得五四獎學金和班級貢獻獎,獎金總數是4850元。
現在給出若干學生的相關資料,請計算哪些同學獲得的獎金總數最高(假設總有同學能滿足獲得獎學金的條件)。
先依題意算出每個人最多可得的獎學金數目,放入a[i],然後排序,獎學金為第一關鍵字,輸入順序為第二關鍵字。
讀入可能會遇到麻煩:用來讀入學生姓名的字串把整行資料都讀入了!這時候我們用字串來解決:
b
[i]:=copy(s,1,pos(' ',s)-1);
//學生姓名
delete(s,1,pos(' ',s));
val(copy(s,1,pos(' ',s)-1),g1);//期末平均成績
delete(s,1,pos(' ',s));
val(copy(s,1,pos(' ',s)-1),g2);//班級評議成績
delete(s,1,pos(' ',s));
g:=s[1];
//是否班幹部
w:=s[3];
//是否西部省份學生
delete(s,1,4);
val(s,x);//發表**篇數
時間複雜度o(n log n)
var
i,j,n,g1,g2,x,y,ans:longint;
g,w,z:char;
s:string;
a,c:array[1..100]of longint;
b:array[0..100]of string;
procedure
qsort
(l,r:longint);
var i,j,key,t,key2,p:longint;
begin
if l>=r then
exit;
i:=l; j:=r;
p:=l+random(r-l+1);
key:=a[p];
key2:=c[p];
repeat
while (a[i]>key)or((a[i]=key)and(c[i]do inc(i);
while (a[j]or((a[j]=key)and(c[j]>key2)) do dec(j);
if i<=j then
begin
t:=a[i];a[i]:=a[j];a[j]:=t;
t:=c[i];c[i]:=c[j];c[j]:=t;
b[0]:=b[i];b[i]:=b[j];b[j]:=b[0];
inc(i);dec(j);
end;
until i>j;
qsort(l,j);
qsort(i,r);
end;
begin
readln(n);
randomize;
for i:=1
to n do
begin
readln(s);
b[i]:=copy(s,1,pos(' ',s)-1);
delete(s,1,pos(' ',s));
val(copy(s,1,pos(' ',s)-1),g1);
delete(s,1,pos(' ',s));
val(copy(s,1,pos(' ',s)-1),g2);
delete(s,1,pos(' ',s));
g:=s[1];
w:=s[3];
delete(s,1,4);
val(s,x);
if (g1>80)and(x>0) then a[i]:=a[i]+8000;
if (g1>85)and(g2>80) then a[i]:=a[i]+4000;
if g1>90
then a[i]:=a[i]+2000;
if (g1>85)and(w='y') then a[i]:=a[i]+1000;
if (g2>80)and(g='y') then a[i]:=a[i]+850;
ans:=ans+a[i];
c[i]:=i;
end;
qsort(1,n);
writeln(b[1]);
writeln(a[1]);
writeln(ans);
end.
寒假任務 洛谷1051 誰拿了最多獎學金
問題描述 輸入檔案scholar.in的第一行是乙個整數n 1 n 100 表示學生的總數。接下來的n行每行是一位學生的資料,從左向右依次是姓名,期末平均成績,班級評議成績,是否是學生幹部,是否是西部省份學生,以及發表的 數。輸出 輸出檔案scholar.out包括三行,第一行是獲得最多獎金的學生的...
洛谷 P1051 誰拿了最多獎學金
問題 某校的慣例是在每學期的期末考試之後發放獎學金。發放的獎學金共有五種,獲取的條件各自不同 2 五四獎學金,每人4000元,期末平均成績高於85分 85 並且班級評議成績高於80分 80 的學生均可獲得 3 成績優秀獎,每人2000元,期末平均成績高於90分 90 的學生均可獲得 4 西部獎學金,...
洛谷 P1051 誰拿了最多獎學金
某校的慣例是在每學期的期末考試之後發放獎學金。發放的獎學金共有五種,獲取的條件各自不同 五四獎學金,每人40004000元,期末平均成績高於8585分 85 85 並且班級評議成績高於8080分 80 80 的學生均可獲得 成績優秀獎,每人20002000元,期末平均成績高於9090分 90 90 ...