• 题目在这里:1084

  • 题目描述:
    “Point, point, life of student!”
    This is a ballad(歌谣)well known in colleges, and you must care about your score in this exam too. How many points can you get? Now, I told you the rules which are used in this course.
    There are 5 problems in this final exam. And I will give you 100 points if you can solve all 5 problems; of course, it is fairly difficulty for many of you. If you can solve 4 problems, you can also get a high score 95 or 90 (you can get the former(前者) only when your rank is in the first half of all students who solve 4 problems). Analogically(以此类推), you can get 85、80、75、70、65、60. But you will not pass this exam if you solve nothing problem, and I will mark your score with 50.
    Note, only 1 student will get the score 95 when 3 students have solved 4 problems.
    I wish you all can pass the exam!
    Come on!

  • 题意分析:
    有五道题,满分是100分,做出5道就是100,4道90,3道80,2道70,1道60,一道都没做出来就是50分。如果你处于和你做出同样多的题目数的人的前一半,那么就可以多拿5分,做出5道题和0道题的同学不在此列。

  • 我的思路:
    记录时间,按照时间降序排列,但是要按照原来的顺序输出分数,所以需要一个数组来记录原来的顺序,不能在原来的数据上直接进行排序,一开始我没有考虑到这个,吃了WA。还有一个问题,考虑到如果是只有一个人,或者好几个人花同样的时间做出了同样的时间,后者可以按照原来的规则来,一个人就再写一个判断就行。
    虽然看discuss,好像没有这样的数据。w(゚Д゚)w
    最后采用一个二维数组来存储做同样多道题的人数和记录原本的顺序,a[5][105],
    比如a[1][0],就是只做出一道题的人数,假如有5个人,那么a[1][1]–a[1][5]就可以保存他们原来的顺序。

  • 完整代码

#include<iostream>
#include<string.h> using namespace std;
typedef struct student
{
char time[15]; //消耗时间
int score; //分数
}student;
student stu[105];
int main()
{
int i, j, k, n, temp, tt;
int a[5][105]; //用于记录做题人数和做题顺序
while (cin >> n) //学生数目n
{
if (n <= 0) break;
memset(a, 0, sizeof(int) * 5 * 105); //归零
for (i = 1; i <= n; i++)
{
cin >> temp >> stu[i].time; //题目数以及消耗时间
stu[i].score = 50 + temp * 10;
if (temp>0 && temp<5)
{
a[temp][0]++; //做出同样题目数目的人
tt = a[temp][0]; //为了标记顺序
a[temp][tt] = i; //记录做出这道题的人的顺序
}
}
for (i = 1; i<5; i++) //做出题目数目从1到4
{
for (j = 2; j <= a[i][0]; j++)
{
for (k = 2; k <= a[i][0] + 2 - j; k++)
{
if (strcmp(stu[a[i][k - 1]].time, stu[a[i][k]].time) > 0) //按照时间大小降序排列
{
swap(a[i][k - 1], a[i][k]);
}
}
}
for (j = 1; j <= a[i][0] / 2; j++)
stu[a[i][j]].score += 5;
}
for (i = 1; i <= n; i++)
cout << stu[i].score << endl;
cout << endl;
}
return 0;
}

HDU 1084 What Is Your Grade?(排序)的更多相关文章

  1. hdu 1084 What Is Your Grade?

    http://acm.hdu.edu.cn/showproblem.php?pid=1084 What Is Your Grade? Time Limit: 2000/1000 MS (Java/Ot ...

  2. HDU.3342 Legal or Not (拓扑排序 TopSort)

    HDU.3342 Legal or Not (拓扑排序 TopSort) 题意分析 裸的拓扑排序 根据是否成环来判断是否合法 详解请移步 算法学习 拓扑排序(TopSort) 代码总览 #includ ...

  3. HDU.1285 确定比赛名次 (拓扑排序 TopSort)

    HDU.1285 确定比赛名次 (拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 只不过这道的额外要求是,输出字典序最小的那组解.那么解决方案就是 ...

  4. HDU 1084:What Is Your Grade?

    Problem Description "Point, point, life of student!" This is a ballad(歌谣)well known in col ...

  5. HDU 4857 逃生 (反向拓扑排序 & 容器实现)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  6. ACM: HDU 1285 确定比赛名次 - 拓扑排序

     HDU 1285 确定比赛名次 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u De ...

  7. ACM: hdu 1811 Rank of Tetris - 拓扑排序-并查集-离线

    hdu 1811 Rank of Tetris Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

  8. hdu 1285 确定比赛名次 拓扑排序

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛 ...

  9. 杭电OJ—— 1084 What Is Your Grade?

    What Is Your Grade? Problem Description “Point, point, life of student!” This is a ballad(歌谣)well kn ...

随机推荐

  1. 利用nginx的fastcgi_cache模块来做缓存

    nginx不仅有个大家很熟悉的缓存代理后端内容的proxy_cache,还有个被很多人忽视的fastcgi_cache. proxy_cache的作用是缓存后端服务器的内容,可能是任何内容,包括静态的 ...

  2. 使用Nginx、Keepalived构建文艺负载均衡

    面对网站服务器端负载增大的问题,是"拿15万¥买一台服务器"来解决,还是靠"加三倍服务器"来解决?还是用其它一些办法? 对于一个访问量日益增加的网站架构而言,从 ...

  3. golang and mogodb

    1.golang的mogodb包下载:http://gopkg.in/mgo.v2    http://gopkg.in/mgo.v2/bson 2.golang的mongodb操作(mgo):htt ...

  4. linq 两个字段排序

    在linq中排序方法有: OrderBy()  --对某列升序排序 ThenBy()    --某列升序后对另一列后续升序排序 OrderByDescending() --对某列降序排序 ThenBy ...

  5. css画扇形按钮

    最近项目中需要制作一个扇形按钮,效果是这样的: 周围四个扇形,和中间的小圆,全是能点击的.这就需要画扇形.百度了一下,有很多文章讲了如何生成扇形,最后我借鉴了一个最简单的实现方式,使用css的clip ...

  6. java使用jdbc连接数据库步骤

    确定连接的数据库类型<mysql,oracle,db2,moangdb,sqlservlet> 下载数据库的驱动(http://mvnrepository.org),并把jar包添加到项目 ...

  7. 微信小程序电商实战-商品列表流式布局

    今天给大家分享一下微信小程序中商品列表的流式布局方式,根据文章内容操作就可以看到效果哦~~~ 流式布局概念 流式布局也叫百分比布局 把元素的宽,高,margin,padding不再用固定数值,改用百分 ...

  8. DOM 事件冒泡

    1.什么是事件冒泡? 事件冒泡就是从具体到不具体, 例如:当你给了一个button按钮一个点击事件,再给他的父级相同的事件,就会按照,button,body,document,window,继续向上冒 ...

  9. java.lang.OutOfMemoryError: Failed to allocate a 3110419 byte allocation with 741152 free bytes and

    在进行SurfaceView的开发时,出现了java.lang.OutOfMemoryError错误: 由于项目是同时显示四路远端传输过来的视频 所以采用的方法是使用:android:hardware ...

  10. MyBatis中sql语句

    一.select <!-- 查询学生,根据id --> <select id="getStudent" parameterType="String&qu ...