• 题目在这里: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. 转-Shell笔记——命令:Sort,uniq,join,cut,paste,split

    转自:http://blog.csdn.net/wklken/article/details/6562098 Sort,uniq,join,cut,paste,split 命令—— Sort Sort ...

  2. etc

    小小的注意点们 交换两个变量的值时, 如果使用异或运算符, 需要先判断两个数是否相等 if (a == b) return; a ^= b; b = a ^ b; a ^= b; 取一个数组的中间位置 ...

  3. C语言答案解析

    1.设整型变量 a=2,则执行下列语句后,浮点型变量b的值不为0.5的是(  B ) A) b=1.0/a            B) b=(float)(1/a) C) b=1/(float)a   ...

  4. 利用COM组件实现对WORD书签处写入值

    using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Wo ...

  5. mysql关键字执行顺序

    from on join where group by having select distinct union order by 昨天去58面试,之前的java基础和数据结构算法之类的都还可以,最后 ...

  6. window.open方法解析

    一.前言 最近在项目中需要新窗口打开一个第三方的页面,大家都知道,使用window.open打开新窗口某些情况下会被浏览器的屏蔽程序阻止.如果要打开的URL是通过AJAX获取的,就一定会被浏览器拦截. ...

  7. SSM环境下配置log4j输出sql和异常到控制台和本地日志文件中

    1.引入日志依赖包 <!--解决Spring使用slf4j输出日志与log4j冲突的问题--> <dependency> <groupId>org.slf4j< ...

  8. display详细说明

    display:block,inline,inline-block区别 display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可 ...

  9. CSS中的样式层叠机制Cascade

    CSS中的样式层叠机制Cascade 一.样式冲突   样式冲突是CSS渲染过程要解决的一个关键问题,样式冲突主要由两个原因造成: 元素包含了不同对象所赋予的样式:浏览器.用户.作者.其中,浏览器样式 ...

  10. Android打包混淆文件模板

    # This is a configuration file for ProGuard. # http://proguard.sourceforge.net/index.html#manual/usa ...