某校的慣例是在每學期的期末考試之後發放獎學金。發放的獎學金共有五種,獲取的條件各自不同:
1) 院士獎學金,每人8000元,期末平均成績高於80分(>80),並且在本學期內發表1篇或1篇以上論文的學生均可獲得;
2) 五四獎學金,每人4000元,期末平均成績高於85分(>85),並且班級評議成績高於80分(>80)的學生均可獲得;
3) 成績優秀獎,每人2000元,期末平均成績高於90分(>90)的學生均可獲得;
4) 西部獎學金,每人1000元,期末平均成績高於85分(>85)的西部省份學生均可獲得;
5) 班級貢獻獎,每人850元,班級評議成績高於80分(>80)的學生幹部均可獲得;
只要符合條件就可以得獎,每項獎學金的獲獎人數沒有限制,每名學生也可以同時獲得多項獎學金。例如姚林的期末平均成績是87分,班級評議成績82分,同時他還是一位學生幹部,那麼他可以同時獲得五四獎學金和班級貢獻獎,獎金總數是4850元。
現在給出若干學生的相關數據,請計算哪些同學獲得的獎金總數最高(假設總有同學能滿足獲得獎學金的條件)。
【輸入文件】
輸入文件scholar.in的第一行是一個整數N(1 <= N <= 100),表示學生的總數。接下來的N行每行是一位學生的數據,從左向右依次是姓名,期末平均成績,班級評議成績,是否是學生幹部,是否是西部省份學生,以及發表的論文數。姓名是由大小寫英文字母組成的長度不超過20的字符串(不含空格);期末平均成績和班級評議成績都是0到100之間的整數(包括0和100);是否是學生幹部和是否是西部省份學生分別用一個字符表示,Y表示是,N表示不是;發表的論文數是0到10的整數(包括0和10)。每兩個相鄰數據項之間用一個空格分隔。
【輸出文件】
輸出文件scholar.out包括三行,第一行是獲得最多獎金的學生的姓名,第二行是這名學生獲得的獎金總數。如果有兩位或兩位以上的學生獲得的獎金最多,輸出他們之中在輸入文件中出現最早的學生的姓名。第三行是這N個學生獲得的獎學金的總數。
【樣例輸入】
4
YaoLin 87 82 Y N 0
ChenRuiyi 88 78 N Y 1
LiXin 92 88 N N 0
ZhangQin 83 87 Y N 1
【樣例輸出】
ChenRuiyi
9000
28700
【分析】
這幾乎是NOIP中最水的題了,只要學過編程的人都會做,只要看清題目,就能一次AC。
【我的代碼】
#include <cstring>
#include <fstream>
using namespace std;
ifstream fin("scholar.in");
ofstream fout("scholar.out");
class Student
{
public:
string name;//學生姓名
unsigned int final;//期末成績
unsigned int Class;//班級評議
bool cadre; //是否幹部
bool west; //是否西部學生
short int lunwen;//論文數量
long long total;
Student()
{
cadre=false;
west=false;
total=0;
}
}N[101];
int n;
int maxn=0;
int maxx=0;
long long s=0;
void init()
{
char chr;
fin>>n;
for (int i=1;i<=n;i++)
{
fin>>N[i].name>>N[i].final>>N[i].Class;
fin>>chr;
if (chr=='Y') N[i].cadre=true;
fin>>chr;
if (chr=='Y') N[i].west=true;
fin>>N[i].lunwen;
}
return;
}
void compute(int num)
{
if (N[num].final>80 && N[num].lunwen>=1) N[num].total+=8000;
if (N[num].final>85 && N[num].Class>80) N[num].total+=4000;
if (N[num].final>90) N[num].total+=2000;
if (N[num].final>85 && N[num].west) N[num].total+=1000;
if (N[num].Class>80 && N[num].cadre) N[num].total+=850;
if (N[num].total>maxn)
{
maxn=N[num].total;
maxx=num;
}
s+=N[num].total;
}
int main()
{
init();
for (int i=1;i<=n;i++)
compute(i);
fout<<N[maxx].name<<endl<<N[maxx].total<<endl<<s<<endl;
return 0;
}
正在连接评测机...
已连接到评测机
正在编译...
编译成功
运行完成
运行时间 0.005 s
平均内存使用 270 KB
测试点通过状况 AAAAAAAAAA
得分:100
恭喜你通过了全部测试点!
已连接到评测机
GRID | 1 |
名称 | Flitty |
系统版本 | 1.00 |
备注 | COGS 1号评测机 Flitty |
编译成功
测试点 | 结果 | 得分 | 运行时间 | 内存使用 | 退出代码 |
1 | 正确 | 10 | 0.001 s | 270 KB | 0 |
2 | 正确 | 10 | 0.000 s | 270 KB | 0 |
3 | 正确 | 10 | 0.000 s | 270 KB | 0 |
4 | 正确 | 10 | 0.000 s | 270 KB | 0 |
5 | 正确 | 10 | 0.000 s | 270 KB | 0 |
6 | 正确 | 10 | 0.000 s | 270 KB | 0 |
7 | 正确 | 10 | 0.001 s | 270 KB | 0 |
8 | 正确 | 10 | 0.000 s | 270 KB | 0 |
9 | 正确 | 10 | 0.000 s | 270 KB | 0 |
10 | 正确 | 10 | 0.001 s | 270 KB | 0 |
运行时间 0.005 s
平均内存使用 270 KB
测试点通过状况 AAAAAAAAAA
得分:100
恭喜你通过了全部测试点!
沒有留言:
張貼留言