Noip2005谁拿了最多的奖学金题解
题解
题目本身没什么好说的。
只是一道普及组的题让我领悟到scanf()读字符的真谛。scanf()函数最奇异的功能就是控制串里除格式化字符串之外的字符。若匹配成功则舍去。所以我们能够“精心设计”这个控制串。在读单个字符时略去全部空格、回车等干扰字符。再也不用cin一个(c)string然后手工推断了。
题目描写叙述
某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共同拥有五种。获取的条件各自不同:
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个学生获得的奖学金的总数。
输入输出例子
输入例子#1:
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
输出例子#1:
ChenRuiyi
9000
28700Code
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n, sum;
struct node
{
bool cad, wst;
int num, ave, gra, pro, sch;
char nam[24];
node(bool cad = false, bool wst = false, int num = 0, int ave = 0, int gra = 0, int pro = 0, int sch = 0, char xnam[24] = "") :
cad(cad), wst(wst), num(num), ave(ave), gra(gra), pro(pro), sch(sch)
{
for(int i = 0; i <= strlen(xnam); ++i) nam[i] = xnam[i];
}
bool operator < (const node& b) const
{
if(sch > b.sch) return true;
if(sch < b.sch) return false;
return num < b.num;
}
}S[105];
int main()
{
char ch[24], cad, wst;
int ave, gra, pro, tmp;
bool fc, fw;
scanf("%d\n", &n);
for(int i = 0; i < n; ++i)
{
tmp = 0;
memset(ch, 0, sizeof(ch));
fc = fw = false;
scanf("%s %d %d %c %c %d\n", ch, &ave, &gra, &cad, &wst, &pro);
//壮哉我scanf大法
if(cad == 'Y') fc = true;
if(wst == 'Y') fw = true;
if(ave > 80 && pro > 0) tmp += 8000;
if(ave > 85 && gra > 80) tmp += 4000;
if(ave > 90) tmp += 2000;
if(fw && ave > 85) tmp += 1000;
if(fc && gra > 80) tmp += 850;
sum += tmp;
S[i] = node(fc, fw, i, ave, gra, pro, tmp, ch);
}
sort(S, S + n);
printf("%s\n%d\n%d\n", S[0].nam, S[0].sch, sum);
return 0;
}
Noip2005谁拿了最多的奖学金题解的更多相关文章
- NOIP200505谁拿了最多的奖学金
NOIP200505谁拿了最多的奖学金 Description 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期 ...
- NOIP2005 谁拿了最多奖学金
1谁拿了最多奖学金 (scholar.pas/c/cpp) [问题描述] 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人800 ...
- 【b501】谁拿了最多的奖学金
Time Limit: 1 second Memory Limit: 50 MB [问题描述] 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同:1) 院士奖学金 ...
- NOIP2007奖学金题解——洛谷1093
题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高 ...
- P1903 奖学金题解
众所周知,这是一道通过struct结构体进行排序的题目 思路:平常的输入.. 然后定义一个结构体grade,存放每个学生的学号.三科成绩.(也可以只存语文成绩和总分和学号) 自定义cmp函数,通过三层 ...
- NOIP2005题解
传送门 考查题型 dp 模拟 贪心 T1 谁拿了最多的奖学金 题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末 ...
- bzoj2660: [Beijing wc2012]最多的方案
题目链接 bzoj2660: [Beijing wc2012]最多的方案 题解 对于一个数的斐波那契数列分解,他的最少项分解是唯一的 我们在拆分成的相临两项之间分解后者,这样形成的方案是最优且不重的 ...
- 洛谷 P3695 CYaRon!语 题解 【模拟】【字符串】
大模拟好啊! 万一远古计算机让我写个解释器还真是得爆零了呢. 题目背景 「千歌です」(我是千歌).「曜です」(我是曜).「ルビィです」(我是露比).「3人合わせて.We are CYaRon! よろし ...
- poj 1106(半圆围绕圆心旋转能够覆盖平面内最多的点)
Transmitters Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4955 Accepted: 2624 Desc ...
随机推荐
- 经典sql-获取当前文章的上一篇和下一篇
我们在做资讯类的网站的时候,肯定会有这么一个需求,就是在资讯内容页的下方需要给出上一篇和下一篇资讯的链接.上次我一同事兼好友兼室友就遇到了这么一个需求,一开始我们都把问题想复杂了,先取的是符合条件的资 ...
- 刘昕鑫 C# 特性详解
C# 特性详解 特性(attribute)是被指定给某一声明的一则附加的声明性信息. 在C#中,有一个小的预定义特性集合.在学习如何建立我们自己的定制特性(custom attributes)之前,我 ...
- (转载)mysql:设置mysql的远程访问
1.登陆Mysqlmysql -u root -p2.允许任何IP访问,其中密码为admingrant all privileges on *.* to root@"%" iden ...
- 用原生js实现ajax
// 通过createXHR()函数创建一个XHR对象 function createXHR() { if(window.XMLHttpRequest) { // IE7.Firefox.Opera. ...
- 20175225《java程序设计》第五周学习总结
20175225 2018-2019-2 <Java程序设计>第5周学习总结 教材学习内容总结 1.接口体中包含常量的声明(没有变量)和抽象方法两部分.接口体中只有抽象方法,没有普通的方法 ...
- securecrt注册方法
使用文中的方法,可以注册Version 7.1.0 (x64 build 244)版本的securecrt. 另有注册机下载地址:http://pan.baidu.com/share/link?sha ...
- 【LOJ】#2116. 「HNOI2015」开店
题解 一道我觉得和二叉树没有关系的题-- 因为直接上点分就过了,虽然很慢,而且代码很长 你需要记录一个点分树,对于每个点分树的重心,记录一下上一次进行分割时树的重心以及这个重心和上一次重心所连接的点以 ...
- Windows 系统采用批处理命令修改 ip 地址
Windows 系统采用批处理命令修改 ip 地址 :: 设置IP地址 set /p choice=请选择设置类型(1:外网IP / 2:内网IP / 3:自动获取IP): echo. if &quo ...
- Java之路(一) 一切皆对象
Java语言假设我们只进行面向对象的程序设计,即在开始用Java进行设计前,我们需要将思想切换到面向对象的世界中. 1.用引用操纵对象 每种编程语言都有自己操纵内存中元素的方式.是直接操纵元素还是用某 ...
- netbeans启动后一会崩溃处理
由于netbeans 默认不支持amd cpu渲染,故需要修改默认配置文件,修改后netbeans没有问题. http://stackoverflow.com/questions/34560485/n ...