水题--Point, point, life of student(仁慈的老师)

@Point, point, life of student!

“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!
Input
Input contains multiple test cases. Each test case contains an integer N (1<=N<=100, the number of students) in a line first, and then N lines follow. Each line contains P (0<=P<=5 number of problems that have been solved) and T(consumed time). You can assume that all data are different when 0<p.
A test case starting with a negative integer terminates the input and this test case should not to be processed.
Output
Output the scores of N students in N lines for each case, and there is a blank line after each case.
Sample Input
4
5 06:30:17
4 07:31:27
4 08:12:12
4 05:23:13
1
5 06:30:17
-1
Sample Output
100
90
90
95

100
期末考试有5个问题。如果你能解决所有5个问题,我会给你100分; 当然,对你们中的许多人来说都是相当困难的。如果你能解决4个问题,你也可以获得95或90分(只有当你的排名在解决4个问题的所有学生的前半部分时才可以得到前者)。比喻(以此类推),你可以获得85,80,75,70,65,60。但如果您没有解决任何问题,您将无法通过此考试,我会将您的分数标记为50.
注意,当3名学生解决了4个问题时,只有1名学生将获得95分。
祝大家都通过考试!
来吧!

输入
输入包含多个测试用例。每个测试用例首先包含一行中的整数N(1 <= N <= 100,学生数),然后是N行。每行包含P(0 <= P <= 5个已解决的问题数)和T(消耗时间)。当0 <p时,您可以假设所有数据都不同。
以负整数开头的测试用例将终止输入,并且不应处理此测试用例。

输出
输出N行, 每行是学生的成绩

每个案例后有一个空行,而且当学生数为1 时,则给的时少的分数。
用结构体存好时间等东西,然后排序排好后,使用排序将各个解题数段的时间排序,进行比较输出。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
	int s;
	int l;
	int t;
	int soc;
}time;
void Quick_sort(int *a, int low, int high) {
  if (low >= high) return ;
  int left  = low;
  int right = high;
  int key = a[left];
  while (left != right) {
    while (left < right && a[right] >= key)
      right--;
    a[left] = a[right];

    while (left < right && a[left] <= key)
      left++;
    a[right] = a[left];
  }
  a[left] = key;
  Quick_sort(a, low, left - 1);
  Quick_sort(a, left + 1, high);
}
int main() {
  time n[102];
  int sum[7];
  int time[3];
  int sort[7][102];
  int a;
  int T;
  while (scanf("%d", &T) && T >= 0) {
    int m[6] ={0};
    memset(sum, 0, sizeof(sum));
    memset(sort, 0, sizeof(sort));
    for (int i = 0; i < T; i++) {
      scanf("%d%d:%d:%d", &a, &time[0], &time[1], &time[2]);
      n[i].s = a;
      n[i].l = i;
      n[i].t = time[0] * 3600 + time[1] * 60 + time[2];
      sum[a]++;
      sort[a][m[a]++] = n[i].t;
    }
    for (int i = 1; i < 6; i++) {
      Quick_sort(sort[i], 0, m[i]);
    }
    for (int i = 0 ; i < T ; i++) {
      switch (n[i].s) {
        case 5: printf("%d\n", 100);break;
        case 4: if (n[i].t <= sort[n[i].s][m[n[i].s] / 2] ) printf("%d\n", 95);
                else printf("%d\n", 90);
                break;
        case 3: if (n[i].t <= sort[n[i].s][m[n[i].s] / 2 ]) printf("%d\n", 85);
                else printf("%d\n", 80);
                break;
        case 2: if (n[i].t <= sort[n[i].s][m[n[i].s] / 2 ] ) printf("%d\n", 75);
                else printf("%d\n", 70);
                break;
        case 1: if (n[i].t <= sort[n[i].s][m[n[i].s] / 2 ]) printf("%d\n", 65);
                else printf("%d\n", 60);
                break;
        case 0: printf("50\n" );
      }
    }
    printf("\n");
  }
  return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值