洛谷1051誰拿了最多獎學金

2021-07-25 23:47:26 字數 2538 閱讀 9113

某校的慣例是在每學期的期末考試之後發放獎學金。發放的獎學金共有五種,獲取的條件各自不同:

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 ...