P1903 奖学金(noip普及2007 No.1)
典型的结构体排序,学过结构体排序的都应该会做.
蒟蒻代码如下:
#include"stdio.h" //本人爱用c的头文件和格式;
#include"algorithm" //重要的 “算法库”;
typedef long long ll; //将long long简写为ll;
using namespace std;
const int MAXN=(int)1e6+5; //定义巨大常量;
struct stu { //存储结构体;
int id; //学号;
int tot,chinese; //总成绩和语文成绩;
} t[MAXN]; //定义类型为stu的一维数组t;
inline bool cmp(stu a,stu b) { //对stu类型单独↑排列;
if(a.tot==b.tot) //如果总分相同;
if(a.chinese==b.chinese) //则比较语文成绩;
return a.id<b.id; //语文成绩相同,比较学号大小;
else
return a.chinese>b.chinese;
else
return a.tot>b.tot;
}
inline int read() { //快读;
int s=0,w=1,ch;
for(ch=getchar(); ch<'0'||ch>'9'; ch=getchar()) if(ch=='-') w=-1;
for(; ch>='0'&&ch<='9'; ch=getchar()) s=(s<<3)+(s<<1)+(ch^48);
return s*w;
}
int main(int argc,char**argv) {
register int n=read(),math,english; //由于数学英语不做比较,所以只要将他们设为形参就行了;
for(register int i=1; i<=n; ++i) {
t[i].id=i; //写出id(学号);
t[i].chinese=read(),math=read(),english=read()//读入各项成绩;
t[i].tot=t[i].chinese+math+english; //计算总分;
}
sort(t+1,t+1+n,cmp); //☆对结构体进行排序;
for(register int i=1; i<=5; ++i) //输出前5名;
printf("%d %d\n",t[i].id,t[i].tot); //学号和总成绩;
return 0; //华华丽丽地结束;
//o╬o <-防伪标记;
}
蒟蒻终于写完题解了!(逃……
…蒟蒻题解Day.4…
See you tomorrow