What Is Your Grade?
来源:互联网 发布:环信 服务端开发 java 编辑:程序博客网 时间:2024/05/16 16:04
点击打开链接
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!
A test case starting with a negative integer terminates the input and this test case should not to be processed.
45 06:30:174 07:31:274 08:12:124 05:23:1315 06:30:17-1
100909095100
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
struct node
{
int list; //原来的排序
int n; //解决的题数
int time; //花的时间(转化为秒)
int grade; //最终成绩
}pre[111];
bool cmp1(node a,node b)
{
if (a.n==b.n)
return a.time<b.time;
return a.n>b.n;
}
bool cmp2(node a,node b)
{
return a.list<b.list;
}
int main()
{
int u;
int num[6];
int th,tm,ts; //时间
while (~scanf ("%d",&u) && (u>0))
{
memset (num,0,sizeof (num));
for (int i=0;i<u;i++)
{
scanf ("%d %d:%d:%d",&pre[i].n,&th,&tm,&ts);
pre[i].grade=50+pre[i].n*10;
pre[i].list=i;
pre[i].time=3600*th+60*tm+ts;
num[pre[i].n]++;
}
sort (pre,pre+u,cmp1);
num[1]/=2;
num[2]/=2;
num[3]/=2;
num[4]/=2;
for (int i=0,j=4;i<u;i++)
{
if (pre[i].n==0 || pre[i].n==5)
continue;
j=pre[i].n;
if (num[j]==0) //作对这个题的有零或一个人
continue;
else
{
pre[i].grade+=5;
num[j]--;//判断是不是在前一半
}
}
sort (pre,pre+u,cmp2);
for (int i=0;i<u;i++)
{
printf ("%d\n",pre[i].grade);
}
printf ("\n");
}
return 0;
}
算法2:
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{ int m; //题目数量 char t[10]; //时间 int b; //题目序号 int s; //成绩 }p[105];// 先按题目数量进行排序,题目数量相同按时间递增排序 int cmp_1(node x, node y){ if(x.m != y.m) return x.m > y.m;return strcmp(x.t,y.t) < 0; }int cmp_2(node x, node y){ return x.b < y.b;}int main(){ int arr[10], brr[10]; //记录下相同题目解决的数量, 成绩 int n; while(~scanf("%d",&n),n+1){ memset(arr,0,sizeof(arr)); memset(brr,0,sizeof(brr)); for(int i = 0;i < n; i++){ scanf("%d %s",&p[i].m,p[i].t); p[i].b = i; arr[p[i].m]++; } sort(p, p+n, cmp_1); for(int i = 0;i < n; i++) { if(p[i].m == 0) { p[i].s = 50; } if(p[i].m == 1) { brr[1]++; if(brr[1] <= arr[1]/2) p[i].s = 65; elsep[i].s = 60; } if(p[i].m == 2) { brr[2]++; if(brr[2] <= arr[2]/2) p[i].s = 75; else p[i].s = 70; } if(p[i].m == 3) { brr[3]++; if(brr[3] <= arr[3]/2)p[i].s = 85; else p[i].s = 80; } if(p[i].m == 4) { brr[4]++; if(brr[4] <= arr[4]/2) p[i].s = 95; else p[i].s = 90; } if(p[i].m == 5) p[i].s = 100; } sort(p, p+n, cmp_2); for(int i = 0;i < n; i++) printf("%d\n",p[i].s); printf("\n"); } return 0;}自己当时硬是没想出来怎么做,看看别人的算法才知道算法真是太多了,还是缺乏锻炼啊。
- What Is Your Grade?
- What Is Your Grade?
- What Is Your Grade?
- what is your grade
- What Is Your Grade?
- What Is Your Grade?
- hdu1084(What Is Your Grade?)
- HDU1084:What Is Your Grade?
- Hdu1084 What Is Your Grade?
- HDU1084--What Is Your Grade?
- HDOJ1084 What Is Your Grade?
- hdu1084:What is your grade?
- HDU1084 What Is Your Grade?
- hd1084 What Is Your Grade?
- 十二、What Is Your Grade?
- What Is Your Grade? HDU
- hdu 1084 What Is Your Grade?
- HDU 1084 What Is Your Grade?
- UESTC
- linux基本操作
- 统计立方数 oj99
- 现代前端技术解析:Web前端技术基础
- Splay树
- What Is Your Grade?
- Struts2文件上传下载和表单重复提交问题
- Android:WIN10+MinGW+NDK编译FFmpeg
- 国产数据库——神通数据库的安装使用
- HDU1789 解题报告
- 【Caffe的C++接口使用说明五)】win10+cuda7.5+caffe+vs2013环境搭建(CPU版本)
- LVS系列—LVS的三种工作方式(DR原理)(二)
- Java基础知识3
- 【简单计算】 oj102