奖学金

题目描述

  某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。

  任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的

输出数据(每行输出两个数:学号、总分) 是:

  7 279

  5 279

  这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是:

  5 279

  7 279

  则按输出错误处理,不能得分。

输入输出格式

输入格式:

  输入文件scholar.in包含n+1行:

  第1行为一个正整数n,表示该校参加评选的学生人数。

  第2到n+1行,每行有3个用空格隔开的数字,每个数字都在0到100之间。第j行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为1~n(恰好是输入数据的行号减1)。

  所给的数据都是正确的,不必检验。

输出格式:

  输出文件scholar.out共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。

输入输出样例

1

输入样例1

6

90 67 80

87 66 91

78 89 91

88 99 77

67 89 64

78 89 98

输出样例1

6 265

4 264

3 258

2 244

1 237

2

输入样例2

8

80 89 89

88 98 78

90 67 80

87 66 91

78 89 91

88 99 77

67 89 64

78 89 98

输出样例2

8 265

2 264

6 264

1 258

5 258

(本题地址)[http://www.luogu.org/problem/show?pid=1093]



这么水的一题,之所以放出来,是因为

纪念编译一次通过 JoKe

纪念编译一次通过且得分最低 JK

好吧是因为这题特别有代表性 ·严肃·

先贴下我的复杂度低但时间超慢的程序(三关键字快速排序+存储所有的数据)

  1. program p1093;
  2. type
  3. LL = longint;
  4. rec = record
  5. chinese, total, order : LL;
  6. end;
  7. var
  8. a : array[1..1000] of rec;
  9. tmp1, tmp2, i, n : LL;
  10. procedure qsort(var l,r : LL);
  11. var
  12. x,y : rec;
  13. i,j : LL;
  14. begin
  15. x:=a[(l+r) div 2];
  16. i:=l;
  17. j:=r;
  18. repeat
  19. while (a[i].total>x.total)or((a[i].total=x.total)and(a[i].chinese>x.chinese))or(((a[i].total=x.total)and(a[i].chinese=x.chinese)and(a[i].order<x.order))) do inc(i);
  20. while (x.total>a[j].total)or((a[j].total=x.total)and(x.chinese>a[j].chinese))or(((a[j].total=x.total)and(a[j].chinese=x.chinese)and(x.order<a[i].order)))do dec(j);
  21. if i<=j then
  22. begin
  23. y:=a[i];
  24. a[i]:=a[j];
  25. a[j]:=y;
  26. inc(i);
  27. dec(j);
  28. end;
  29. until i>j;
  30. if (i<r) then qsort(i,r);
  31. if (j>l) then qsort(l,j);
  32. end;
  33. begin
  34. readln(n);
  35. for i:=1 to n do
  36. begin
  37. readln(a[i].chinese,tmp1,tmp2);
  38. a[i].total:=a[i].chinese+tmp1+tmp2;
  39. a[i].order:=i;
  40. end;
  41. tmp1:=1;
  42. tmp2:=n;
  43. qsort(tmp1,tmp2);
  44. for i:=1 to 5 do writeln(a[i].order,' ',a[i].total);
  45. end.

测试都是对的,但是dear Lord,runtimeerror202,10分

然后贴下题解

  1. var n,i,j,k,x,y,z:longint;
  2. s:qword;
  3. a:array[1..5] of qword;
  4. begin
  5. readln(n);
  6. fillchar(a,sizeof(a),0);
  7. for i:=1 to n do
  8. begin
  9. readln(x,y,z);
  10. s:=x+y+z;
  11. s:=s*1000+x;
  12. s:=s*10000+10000-i;
  13. j:=1;
  14. while (a[j]>s)and(j<6) then inc(j);
  15. if j<6 then
  16. begin
  17. for k:=5 downto j+1 do
  18. a[k]:=a[k-1];
  19. a[j]:=s;
  20. end;
  21. end;
  22. for i:=1 to 5 do
  23. writeln(10000-(a[i] mod 10000),' ',a[i] div 10000000);
  24. end.

细节就不分析了,有一个要点我觉得要注意:

** 位数固定时可以用一个数存一打数 **

P1093 奖学金的更多相关文章

  1. 洛谷 P1093 奖学金

    P1093 奖学金 题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相 ...

  2. 洛谷——P1093 奖学金

    P1093 奖学金 题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相 ...

  3. 洛谷 P1583魔法照片 & P1051谁拿了最多奖学金 & P1093奖学金

    题目:https://www.luogu.org/problemnew/show/P1583 思路:sort sort sort //#include<bits/stdc++.h> #in ...

  4. 洛谷 P1093 奖学金【三级结构体排序】

    题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高 ...

  5. (水题)洛谷 - P1093 - 奖学金

    https://www.luogu.org/problemnew/show/P1093 #include<bits/stdc++.h> using namespace std; #defi ...

  6. 洛谷P1093 奖学金

    https://www.luogu.org/problem/P1093 #include <bits/stdc++.h> using namespace std; struct Node{ ...

  7. (Java实现)洛谷 P1093 奖学金

    题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高 ...

  8. (排序EX)P1093 奖学金

    题解: #include<iostream>using namespace std;int r=0;void swap(int &a,int &b){  int t=a;  ...

  9. P1093||T1142 奖学金 洛谷||codevs

    http://codevs.cn/problem/1142/ || https://www.luogu.org/problem/show?pid=1093 题目描述 某小学最近得到了一笔赞助,打算拿出 ...

随机推荐

  1. 2.6内核LOGO制作方法

    http://blog.csdn.net/tommy_wxie/article/details/8594286

  2. APP测试点总结

    1.功能性测试: ——根据产品需求文档编写测试用例. ——软件设计文档编写用例. 注意:就是根据产品需求文档编写测试用例而进行测试.2.兼容性测试: ——android版本的兼容性 ——手机分辨率兼容 ...

  3. RNN神经网络和英中机器翻译的实现

    本文系qitta的文章翻译而成,由renzhe0009实现.转载请注明以上信息,谢谢合作. 本文主要讲解以recurrent neural network为主,以及使用Chainer和自然语言处理其中 ...

  4. 【练习】数据移动---parfile导出表中指定行:

    要求: ①创建存放数据的文件: ②使用默认的bad文件生成方式: ③使用truncate选项方式. 1.准备条件: [oracle@host03 ~]$ mkdir datadump [oracle@ ...

  5. AngularJs 简单实现全选,多选操作

    很多时候我们在处理CURD(增删改查)的时候需要实现批量操作数据,这时候就必须使用多选操作. Angular 中实现如下(当然还有很多种比笔者写的更好的方法,这里只是简单的实现.) demo 演示地址 ...

  6. GRIDVIEW 控件

    http://www.cnblogs.com/shanymen/archive/2009/05/22/1486654.html GridView控件是.net里的一个显示数据控件,该控件制作很人性化, ...

  7. Devexpress VCL Build v2014 vol 15.2.3 发布

    2016年第一个版本,继续修补. New Major Features in 15.2 What's New in VCL Products 15.2 Breaking Changes To lear ...

  8. 在bootstrap ace样式框架上修改的后台管理型模板(Tab页后台管理模板)

    后台管理模板开始用frameset布局,但是有时候会遮挡比如上面导航或者左边导航的二级三级弹出菜单,因为宽度被限制了,所以有时候就用easyui或者ext的,但是样式不好看,然后看到了bootstra ...

  9. jQuery之ajax的跨域获取数据

    如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型.使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面.服务 ...

  10. .net该的帐

    1.web api 2.socket通信 3.NUnit单元测试 4.了解自动化测试各种工具