体育成绩统计 / Score

题目描述 

  正所谓“无体育,不清华”。为了更好地督促同学们进行体育锻炼,更加科学地对同学们进行评价,五道口体校的老师们在体育成绩的考核上可谓是煞费苦心。然而每到学期期末时,面对海量的原始数据,如何对数据进行处理,得到同学们的体育总评成绩却又成了体育部老师的一大难题。

  对于大一的同学们来说,体育课的总评成绩由五部分组成:体育课专项成绩(满分50分)、长跑测试成绩(满分20分)、“阳光长跑”成绩(满分10分)、体质测试成绩(满分10分)、“大一专项计划”成绩(满分10分)。

  1.体育课专项成绩将由任课体育老师直接给出。

  2.长跑测试成绩将由期末长跑测试确定,其中男生需进行3000米测试,女生需进行1500米测试,具体评分标准为:

20

18

16

14

12

10

8

6

4

2

男生

12’30”

13’00”

13’30”

14’00”

14’30”

15’10”

15’50”

16’30”

17’10”

18’00”

女生

6’40”

6’57”

7’14”

7’31”

7’50”

8’05”

8’20”

8’35”

8’50”

9’00”

  3.“阳光长跑”是通过手机app来记录同学们的课外长跑情况,根据对原始跑步数据进行筛选,得到课外长跑的合法次数,来最终确定此部分的成绩。一条合法的锻炼记录需同时满足:

   1)男生长跑距离3000米以上(包含3000米),女生长跑距离1500米以上(包含1500米);

   2)平均速度(运动距离结束时间开始时间)不慢于2米/秒,且不快于5米/秒;

   3)总暂停时间不得超过4分30秒;

   4)平均步幅(距离/步数)不超过1.5米;

   5)开始时间需与上条合法记录的结束时间间隔6小时以上(包含6小时);

   “阳光长跑”的合法次数与该部分得分的对应如下:

分数

10

9

8

7

6

4

2

次数

>=21

20,19

18,17

16,15,14

13,12,11

10,9,8,7

6,5,4,3

  4.对于体质测试部分,若达到合格标准则得到该部分满分10分,否则该部分不得分。

  5.“大一专项计划”的10分由两部分组成:出勤次数占5分,期末检测占5分。其中出勤次数为“班级训练营”的参加次数和“阳光长跑”的合法次数之和,出勤得分与出勤次数的对应如下:

分数

5

4

3

2

1

次数

>=18

17,16,15

14,13,12

11,10,9

8,7,6

  不难看出,要想准确无误地计算出每个人的体育成绩并不是一件轻松的事,于是体育部的老师找到了正在打模拟赛的你,他将提供所有需要用到的数据,希望你帮他算算清华大一同学的体育总评成绩及等级。

  百分制成绩与等级、绩点对应如下:

等级

A

A-

B+

B

B-

C+

百分制

[95,100]

[90,94]

[85,89]

[80,84]

[77,79]

[73,76]

等级

C

C-

D+

D

F

百分制

[70,72]

[67,69]

[63,66]

[60,62]

[0,59]

输入格式

  输入第一行,包含一个正整数,表示大一年级的学生人数。($n \le 4000$)

  接下来行,每行表示一位学生(按学号字典序给出),各项数据之间用空格隔开,一位学生的数据包括:

   1.一个长度为10的正整数$id$(数据保证不包含前导零),表示第$i$位同学的学号;

   2.一个字符,$M$或$F$,若为$M$表示第$i$位同学为男生,若为$F$则表示第$i$位同学为女生;

   3.一个介于0到50之间的非负整数$ps$,表示第$i$位同学的体育课专项成绩;

   4.一个形如$a'b"$的字符串,表示第$i$位同学的期末长跑测试成绩为$a$分$b$秒($0 \le a,b \le 59$);

   5.一个字符,$P$或$F$,若为$P$示第$i$位同学的体质测试通过,若为$F$则表示第$i$位同学的体质测试没有通过;

   6.一个介于0到5之间的非负整数$fs$,表示第$i$位同学的“大一专项计划”的期末检测成绩;

   7.一个非负整数$cnt$($0 \le cnt \le 100$),表示第$i$位同学参加“班级训练营”的次数。

  接下来一行,包括一个非负整数$m$($m \le 1.5\times10^5$),表示需要筛选的“阳光长跑”数据条数。

  接下来$m$行,每行表示一条需要筛选的“阳光长跑”数据(按开始时间顺序给出),各项之间用空格隔开,一条数据包括:

   1.一个形如$2017MMDD$的字符串,表示第$j$条记录的完成日期;

   2.一个长度为10的正整数$id$(数据保证不包含前导零),表示第$j$条记录的来源学号;

   3.两个形如$hh:mm:ss$的字符串,分别表示第$j$条记录的开始时间和结束时间;

   4.一个精确到小数点后两位的非负浮点数$l$$(0 \le l \le 100)$,表示第$j$条记录的运动距离,单位为千米;

   5.一个形如$a'b"$的字符串,表示第$j$条记录的总暂停时间为$a$分$b$秒($0 \le a,b \le 59$);

   6.一个非负整数,表示第条记录的运动总步数。

  输入格式可参见下发样例文件。

  只有四组数据,全部随机生成

输出格式

  输出文件共包括行。请你按照学号字典序输出每一位同学的学号、百分制总评成绩以及等级。每位同学一行,一行内用空格隔开。

样例输入

1
2015011233 M 34 14'30" P 3 3
8
20170508 2015011233 17:02:33 17:19:33 2.99 0'0" 3333
20170509 2015011233 17:12:15 17:38:46 3.01 2'3" 4300
20170510 2015011233 22:03:06 22:13:08 3.05 0'0" 2772
20170511 2015011233 22:08:05 22:28:13 3.02 5'3" 3775
20170512 2015011233 18:03:12 18:17:56 3.02 0'0" 2001
20170513 2015011233 17:30:23 17:46:08 3.01 0'0" 3020
20170513 2015011233 22:03:34 22:20:08 3.04 2'0" 3058
20170514 2015011233 07:16:22 07:32:34 3.00 0'0" 3244

样例输出

2015011233 59 F

思路

  这似乎就是简单的大模拟,但是非常考码力。

代码

#include <stdio.h>
#define N 5000
#define M 200000
int n,m;
long long num[N];
char is_m[N][2],a;
int score[N],tmp;
int times[N];
int head[N];
int nxt[M],to[M],pre[M];
int idx;
int day[13]={0,31,59,90,120,151,181,212,243,273,304,334,365};
struct Node
{int time,time_end,time_beg;bool is;double lenth;
};
Node node[M];
int find(long long number)
{int l=1,r=n+1;while(l<r){int mid=(l+r)>>1;if(num[mid]>=number) r=mid;else l=mid+1;}return l;
}
void add(int a,int b)
{nxt[++idx]=head[a];pre[head[a]]=idx;head[a]=idx;to[idx]=b;
}
void check(int ord)
{int now,many=0,last=0;for(now=head[ord];nxt[now];now=nxt[now]);for(;now;now=pre[now])if(node[to[now]].is==false&&node[to[now]].time_beg-last>=6*3600)many++,last=node[to[now]].time_end;if(many>=21) score[ord]+=10;else if(many>=19) score[ord]+=9;else if(many>=17) score[ord]+=8;else if(many>=14) score[ord]+=7;else if(many>=11) score[ord]+=6;else if(many>=7) score[ord]+=4;else if(many>=3) score[ord]+=2;many+=times[ord];if(many>=18) score[ord]+=5;else if(many>=15) score[ord]+=4;else if(many>=12) score[ord]+=3;else if(many>=9) score[ord]+=2;else if(many>=6) score[ord]+=1;
}
int main()
{freopen("Score.in","r",stdin);freopen("Score.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++){int t1,t2;scanf("%I64d",&num[i]);scanf("%s",is_m[i]);scanf("%d",&score[i]);scanf("%d%c",&t1,&a),scanf("%d%c",&t2,&a),scanf("%c",&a);t1=t1*60+t2;if(is_m[i][0]=='M'){if(t1<=750) score[i]+=20;else if(t1<=780) score[i]+=18;else if(t1<=810) score[i]+=16;else if(t1<=840) score[i]+=14;else if(t1<=870) score[i]+=12;else if(t1<=910) score[i]+=10;else if(t1<=950) score[i]+=8;else if(t1<=990) score[i]+=6;else if(t1<=1030) score[i]+=4;else if(t1<=1080) score[i]+=2;}else{if(t1<=400) score[i]+=20;else if(t1<=417) score[i]+=18;else if(t1<=434) score[i]+=16;else if(t1<=451) score[i]+=14;else if(t1<=470) score[i]+=12;else if(t1<=485) score[i]+=10;else if(t1<=500) score[i]+=8;else if(t1<=515) score[i]+=6;else if(t1<=530) score[i]+=4;else if(t1<=540) score[i]+=2;}scanf("%c",&a);if(a=='P') score[i]+=10;scanf("%d",&tmp),score[i]+=tmp;scanf("%d",&times[i]);}scanf("%d",&m);for(int i=1;i<=m;i++){node[i].is=false;int tmp2=0;long long tmp3;scanf("%4d",&tmp),scanf("%2d",&tmp);tmp2=day[tmp-1],scanf("%2d",&tmp),tmp2+=tmp-1;node[i].time=tmp2*24*3600;scanf("%I64d",&tmp3),add(tmp=find(tmp3),i);node[i].time_beg=node[i].time_end=node[i].time;scanf("%d",&tmp2);node[i].time_beg+=tmp2*3600;scanf("%c%d",&a,&tmp2);node[i].time_beg+=tmp2*60;scanf("%c%d",&a,&tmp2);node[i].time_beg+=tmp2;scanf("%d",&tmp2);node[i].time_end+=tmp2*3600;scanf("%c%d",&a,&tmp2);node[i].time_end+=tmp2*60;scanf("%c%d",&a,&tmp2);node[i].time_end+=tmp2;scanf("%lf",&node[i].lenth);node[i].lenth*=1000;if(is_m[tmp][0]=='M') {if(node[i].lenth<3000) node[i].is=true;}if(is_m[tmp][0]=='F') {if(node[i].lenth<1500) node[i].is=true;}scanf("%d",&tmp2);tmp=tmp2*60;scanf("%c%d",&a,&tmp2);tmp+=tmp2;scanf("%c",&a),scanf("%c",&a);if(tmp>270) node[i].is=true;scanf("%d",&tmp2);if(tmp2*3<node[i].lenth*2) node[i].is=true;if(!(node[i].lenth<=(node[i].time_end-node[i].time_beg)*5&&node[i].lenth>=(node[i].time_end-node[i].time_beg)*2))node[i].is=true;}for(int i=1;i<=n;i++){check(i);printf("%I64d %d ",num[i],score[i]);if(score[i]>=95) printf("A\n");else if(score[i]>=90) printf("A-\n");else if(score[i]>=85) printf("B+\n");else if(score[i]>=80) printf("B\n");else if(score[i]>=77) printf("B-\n");else if(score[i]>=73) printf("C+\n");else if(score[i]>=70) printf("C\n");else if(score[i]>=67) printf("C-\n");else if(score[i]>=63) printf("D+\n");else if(score[i]>=60) printf("D\n");else if(score[i]>=0) printf("F\n");}
}

  

转载于:https://www.cnblogs.com/yangsongyi/p/9403992.html

体育成绩统计——20180801模拟赛T3相关推荐

  1. 基础算法4 —— 结构体(成绩统计) + 栈(模拟进制转换 + 优秀的拆分) + 指针

    结构体 结构体的实际应用场景: 在实际问题中,一组数据往往具有不同的数据类型.比如,某次期末考试中要记录一个学生的考试信息,除了有姓名(char)外,还有班级(int).性别(char).语文.数学. ...

  2. [LOJ]体育成绩统计 / Score (无脑模拟,没有脑子,就是上!)

    题目 好久没敲过恶心的模拟题了,莫名有点怀念是什么鬼,我还记得我的zamjena 没啥想说的,这道题就是没智商有码力的 纯粹是纪念一下今天上午直接肝了的两个半小时,真的一点思维都不需要有,直接上!! ...

  3. 某 SCOI 模拟赛 T3 s3mple【生成函数 拉格朗日插值】

    题意 对于序列 a a a,记 v i v_i vi​ 为位置距离 a i a_i ai​ 最近的.比 a i a_i ai​ 大的数与它的距离(假设 a 0 a_0 a0​ 和 a n + 1 a_ ...

  4. 体育测试成绩用什么软件制表,如何用电子表格进行体育成绩的统计.docx

    如何用电子表格进行体育成绩的统计 (潍坊职业学院 , 山东 潍坊 261041)摘要 :体育统计是体育教育工作者经常要做的工作 ,而人工的统计复杂而繁琐 ,利用计算机电子表格进行的体育成绩的统计简单有 ...

  5. 2021年暑假数学建模第三次模拟赛:全国各省人均消费分析与预测(很好的SPSS统计训练)

    本系列赛题.数据获取: 2021年暑假数学建模模拟赛(赛题+数据+分析) 不直接提供论文等资料,分析已经很详细了 整理不易,欢迎点赞+关注+收藏 赛题 分析 这次的赛题完全可以全用SPSS来实现,以前 ...

  6. 省选模拟赛记录(越往下越新哦~~~)

    LOG 模拟赛 第一次见尼玛这么给数据范围的-- 开考有点困,迷迷糊糊看完了三道题,真的是像老吕说的那样,一道都不会-- 思考T1,感觉有点感觉,但是太困了,就先码了暴力,发现打表可以50分,于是就大 ...

  7. ssl提高组周六模拟赛【2018.9.8】

    前言 开学后,新学年新气象,学校题库也迎来了新的改动,界面大改变,也可以比赛了. 所以这周就有比赛了,而在纪中被虐习惯后回来渴望继续被虐就来参加提高组模拟赛(反正今年也参加提高组) 成绩 只放Rank ...

  8. 蓝桥杯模拟赛第二场(web)

    文章目录 蓝桥杯模拟赛第二场(web) 1 卡片化标签页 2 随机数生成器 3 个人博客 4 学生成绩统计 5 水果摆盘 6 给页面化个妆 7 小兔子爬楼梯 8 时间管理大师 9 购物车 10 菜单树 ...

  9. [CSP冲刺班]CSP-J2021模拟赛#9

    !!!爆零警告 得分 凄凄惨惨戚戚 我上来浏览了一遍题目,觉得都挺简单的(事实证明我太年轻了),挑了我认为最简单的第二题开始做,做了半个小时,A掉了.然后做第二题,拿了部分分(无嵌套30分).第三题写 ...

  10. 第十四届蓝桥杯(Web 应用开发)模拟赛 1 期-职业院校组-知识点题解

    这个题解是参考了"海底烧烤店ai"一位非常优秀的全栈领域创作者的博主写的,自己在看的时候发现个人知识点比较欠缺,所以就在题解下面添加了一些知识点,便于理解. 原博主的文章链接如下: ...

最新文章

  1. pytorch 优化器 机器学习 调参
  2. Insufficient parameters supplied to the command
  3. 学python需要什么基础知识-学Python需要什么基础知识?零基础可以学Python吗?
  4. python代码写入方式_【Python 1-17】Python手把手教程之——文件的读写以及I/O操作...
  5. [云炬python3玩转机器学习] 5-3简单线性回归的实现
  6. Windows10选择文件打开方式没有始终允许的解决方案
  7. ROS-Rtabmap:linux shell运行多个shell(运行多个程序)
  8. python spark进行大数据分析_第2天Python实战Spark大数据分析及调度-RDD编程
  9. 显示数量_SOLIDWORKS 标注螺纹不显示数量?Why
  10. JVM对象内存分配详细过程(栈上分配->TLAB->老年代->Eden区)
  11. c# mysql 链接池溢出_C#MySQL连接池限制,并清理连接
  12. JSON和JSONP的差别,以及用法
  13. 从零基础入门Tensorflow2.0 ----七、36. 文本生成之---2. 构建模型
  14. kotlin使用spring data jpa(三)
  15. atlas怎么看日志_[系列文章] Gin框架 - 使用logrus日志记录
  16. 计算机四级网络工程师(计算机网络单选)- 知识点
  17. java三三剩二五五剩三,大年三十彩灯悬,彩灯齐明光灿灿,三三数时能数尽,五五数时剩一盏,七七数时刚刚好,八八数时还缺三,...
  18. C语言scanf为啥有时候要输入两次(解析)
  19. JavaScript名词shim与polyfill
  20. xlwings库的基本使用笔记

热门文章

  1. Xcelsius 2008 在win10 64位系统下 基于OFFICE2010-x64 的安装
  2. 数据结构重点选择题(高分必备)
  3. python爬取网课答案_高校邦网络数据采集与Python爬虫【带实验】网课答案
  4. OpenCV 自带示例sample中的双目校正stereo_calib.cpp 安装与解读
  5. 服务器系统事件6013,系统-事件ID:6013
  6. 温州大学《机器学习》课件!
  7. 7-5 换硬币 (20 分)
  8. 保持初心,不负韶华||回顾2021,展望2022
  9. 如何快速找到自己手机号码或邮箱注册过哪些网站
  10. gitlab 多人协同工作