这应该是比较简单的一个模拟题,但是考试的时候花了较长的时间,并且最后一个case没过,丢了6分。这题的通过率不高,可见最后一个case还是有挑战性的。

考试的时候想的是在录数据的时候建立一个【ID】到【成绩信息】的映射,但是看网上代码用一个数组来录信息,然后建立【ID】到【数组索引】的映射。根据我的想法反正最后一个case根本过不了,可能只能按照网上博客的思路才行。


考试时的代码(最后一个case报错):

  1. #include <stdio.h>
  2. #include <memory.h>
  3. #include <math.h>
  4. #include <string>
  5. #include <vector>
  6. #include <set>
  7. #include <stack>
  8. #include <queue>
  9. #include <algorithm>
  10. #include <map>
  11.  
  12. #define I scanf
  13. #define OL puts
  14. #define O printf
  15. #define F(a,b,c) for(a=b;a<c;a++)
  16. #define FF(a,b) for(a=0;a<b;a++)
  17. #define FG(a,b) for(a=b-1;a>=0;a--)
  18. #define LEN 501
  19. #define MAX 0x06FFFFFF
  20.  
  21. using namespace std;
  22.  
  23. typedef struct Student{
  24. string name;
  25. int gp,gm,gf,G;
  26. Student(){
  27. gp=,gm=,gf=,G=;
  28. }
  29. Student(string n,int p,int m,int f,int g){
  30. name=n;
  31. gp=p,gm=m,gf=f,G=g;
  32. }
  33. bool operator < (Student const & o)const
  34. {
  35. if(G<o.G) return true;
  36. else if(G==o.G) return name<o.name;
  37. }
  38. }Student;
  39. Student output[];
  40.  
  41. #define MAP map<string,Student*>
  42.  
  43. MAP info;
  44. bool cmp(Student a,Student b);
  45.  
  46. int main() {
  47. freopen("d:/input/A1137.txt","r",stdin);
  48. int P,M,F,t;
  49. char buffer[];
  50. scanf("%d %d %d",&P,&M,&F);
  51. while(P-->){
  52. I("%s",buffer);
  53. scanf("%d",&t);
  54. string name(buffer);
  55. MAP::iterator it=info.find(name);
  56. Student * tmp;
  57. if(it==info.end()){
  58. tmp=new Student;
  59. tmp->gp=t;
  60. tmp->name=name;
  61. info[name]=tmp;
  62. }else{
  63. tmp=it->second;
  64. tmp->gp=t;
  65. }
  66. }
  67. while(M-->){
  68. I("%s",buffer);
  69. scanf("%d",&t);
  70. string name(buffer);
  71. MAP::iterator it=info.find(name);
  72. Student * tmp;
  73. if(it==info.end()){
  74. tmp=new Student;
  75. tmp->gm=t;
  76. tmp->name=name;
  77. info[name]=tmp;
  78. }else{
  79. tmp=it->second;
  80. tmp->gm=t;
  81. }
  82. }
  83. while(F-->){
  84. I("%s",buffer);
  85. scanf("%d",&t);
  86. string name(buffer);
  87. MAP::iterator it=info.find(name);
  88. Student * tmp;
  89. if(it==info.end()){
  90. tmp=new Student;
  91. tmp->gf=t;
  92. tmp->name=name;
  93. info[name]=tmp;
  94. }else{
  95. tmp=it->second;
  96. tmp->gf=t;
  97. }
  98. }
  99. int n,i=;
  100. MAP::iterator it=info.begin();
  101. while(it!=info.end()){
  102. Student * p=it->second;
  103. int gp,gm,gf,G;
  104. gp=p->gp;gm=p->gm,gf=p->gf;
  105. string name=p->name;
  106. if(!(gp< || gf< || gf >)){
  107. if(gm==) gm=-;
  108. if(gf>=gm) G=gf;
  109. else{
  110. G=round(0.4*(double)gm+0.6*(double)gf);
  111. }
  112. output[i++]=Student(name,gp,gm,gf,G);
  113. }
  114. it++;
  115. }
  116. n=i;
  117. sort(output,output+n,cmp);
  118. FF(i,n){
  119. O("%s %d %d %d %d\n",output[i].name.c_str(),output[i].gp,output[i].gm,output[i].gf,output[i].G);
  120. }
  121. return ;
  122. }
  123.  
  124. bool cmp(Student a,Student b){
  125. if(a.G>b.G) return true;
  126. else if(a.G==b.G) return a.name<b.name;
  127. return false;
  128. }

参考网上博客后AC的代码:

  1. #include <stdio.h>
  2. #include <memory.h>
  3. #include <math.h>
  4. #include <string>
  5. #include <vector>
  6. #include <set>
  7. #include <stack>
  8. #include <queue>
  9. #include <algorithm>
  10. #include <map>
  11.  
  12. #define I scanf
  13. #define OL puts
  14. #define O printf
  15. #define F(a,b,c) for(a=b;a<c;a++)
  16. #define FF(a,b) for(a=0;a<b;a++)
  17. #define FG(a,b) for(a=b-1;a>=0;a--)
  18. #define LEN 501
  19. #define MAX 0x06FFFFFF
  20.  
  21. using namespace std;
  22.  
  23. typedef struct Student{
  24. string name;
  25. int gp,gm,gf,G;
  26. Student(){
  27. gp=,gm=,gf=,G=;
  28. }
  29. Student(string n,int p,int m,int f,int g){
  30. name=n;
  31. gp=p,gm=m,gf=f,G=g;
  32. }
  33. }Student;
  34.  
  35. Student students[];
  36.  
  37. #define MAP map<string,int>
  38.  
  39. MAP name2index;
  40.  
  41. bool cmp(Student a,Student b);
  42.  
  43. int main() {
  44. freopen("d:/input/A1137.txt","r",stdin);
  45. int P,M,F,t;
  46. char buffer[];
  47. scanf("%d %d %d",&P,&M,&F);
  48. int cnt=;
  49. while(P-->){
  50. I("%s",buffer);
  51. scanf("%d",&t);
  52. string name(buffer);
  53. if(t>=){
  54. name2index[name]=cnt;
  55. students[cnt++]=Student(name,t,-,-,-);
  56. }
  57. }
  58. while(M-->){
  59. I("%s",buffer);
  60. scanf("%d",&t);
  61. string name(buffer);
  62. int index=name2index[name];
  63. if(index>){
  64. students[index].gm=t;
  65. }
  66. }
  67. while(F-->){
  68. I("%s",buffer);
  69. scanf("%d",&t);
  70. string name(buffer);
  71. int index=name2index[name];
  72. if(index>){
  73. students[index].gf=t;
  74. }
  75. }
  76. int i;
  77. FF(i,cnt){
  78. Student &tmp=students[i];
  79. if(tmp.gf>=tmp.gm) tmp.G=tmp.gf;
  80. else{
  81. double t=tmp.gm*+tmp.gf*;
  82. t/=;t+=0.5;
  83. tmp.G=t;
  84. }
  85. if(tmp.G<) tmp.G=-;
  86. }
  87. sort(students+,students+cnt,cmp);
  88. F(i,,cnt+){
  89. if(students[i].G>=)
  90. O("%s %d %d %d %d\n",students[i].name.c_str(),
  91. students[i].gp,students[i].gm,students[i].gf,students[i].G);
  92. }
  93. return ;
  94. }
  95.  
  96. bool cmp(Student a,Student b){
  97. if(a.G==-) return false;
  98. if(a.G>b.G) return true;
  99. else if(a.G==b.G) return a.name<b.name;
  100. return false;
  101. }

需要注意的点:

  1.数组长度应该设置为1e5,否则段错误。

2. sort的第二个参数调试的时候脑抽写错了。students数组存储元素的范围是[1,cnt),第二个参数我脑抽写成了students+cnt+1

3. 判断成绩是否有效的判断语句也写错了。及格应该是大于等于,写成>60第二个和最后一个case过不了。

A1137 | 录数据查询模拟的更多相关文章

  1. Django models .all .values .values_list 几种数据查询结果的对比

    Django models .all .values .values_list 几种数据查询结果的对比

  2. MVC实用架构设计(三)——EF-Code First(4):数据查询

    前言 首先对大家表示抱歉,这个系列已经将近一个月没有更新了,相信大家等本篇更新都等得快失望了.实在没办法,由于本人水平有限,写篇博客基本上要大半天的时间,最近实在是抽不出这么长段的空闲时间来写.另外也 ...

  3. 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

    前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...

  4. SharePoint服务器端对象模型 之 使用CAML进展数据查询

    SharePoint服务器端对象模型 之 使用CAML进行数据查询 一.概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选.排序条件,获得某个列表或者某一些列表中相应的列 ...

  5. .NET应用架构设计—面向查询服务的参数化查询设计(分解业务点,单独配置各自的数据查询契约)

    阅读目录: 1.背景介绍 2.对业务功能点进行逻辑划分(如:A.B.C分别三个业务点) 2.1.配置映射关系,对业务点配置查询契约(构造VS插件方便生成查询契约) 2.2.将配置好的映射策略文件放在调 ...

  6. Yii2 数据查询

    转载来自: http://www.yiichina.com/tutorial/95 数据查询 User::find()->all(); 此方法返回所有数据: User::findOne($id) ...

  7. 6、SQL Server 数据查询

    一.使用SELECT检索数据 数据查询是SQL语言的中心内容,SELECT 语句的作用是让数据库服务器根据客户要求检索出所需要的信息资料,并按照规定的格式进行整理,返回给客户端. SELECT 语句的 ...

  8. SQL Server 的表数据简单操作(表数据查询)

    --表数据查询----数据的基本查询-- --数据简单的查询--select * | 字段名[,字段名2, ...] from 数据表名 [where 条件表达式] 例: use 商品管理数据库 go ...

  9. asp.net mvc 数据查询赋值到文本框中

    大家做了很多文本框查询并且赋值回来 1.先是把数据对象查询结果后台,然后把对象赋值给对象在赋值回来前台页面 2.使用@html helerper 数据查询,使用 ViewContext.RouteDa ...

随机推荐

  1. Typora使用手册

    块状元素: 标题: # 标题1 ## 标题2 ### 标题3 #### 标题4 ##### 标题5 ###### 标题6 使用快捷键: Ctrl + 1-6 块引用 使用符号 > 就可以进入引用 ...

  2. SSM之Mybatis整合及使用

    SSM 在ss基础上加进行整合Mybatis(applicationContext.xml中添加配置),并添加分页拦截器(添加mybatis分页拦截器),并用generator动态生成到层. 构建基础 ...

  3. Guava入门

    其实我用guava差不多大半年时间了,发现guava真的特别好用,又会使代码变得很简洁,最近又系统的学习了一下,大致讲一下

  4. django子应用

    在Web应用中,通常有一些业务功能模块是在不同的项目中都可以复用的,故在开发中通常将工程项目拆分为不同的子功能模块,各功能模块间可以保持相对的独立,在其他工程项目中需要用到某个特定功能模块时,可以将该 ...

  5. 33、vue中的事件修饰符.stop、.prevent、.self、.capture、.once

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. JavaScript 之 页面加载事件

    一.onload 加载事件 onload 是 window 对象的一个事件,也可以省略 window 直接使用. 常用方式: <head><script> windown.on ...

  7. 内网漫游之SOCKS代理大结局

    0×01 引言 在实际渗透过程中,我们成功入侵了目标服务器.接着我们想在本机上通过浏览器或者其他客户端软件访问目标机器内部网络中所开放的端口,比如内网的3389端口.内网网站8080端口等等.传统的方 ...

  8. 揭秘MySQL主从数据不一致

    前言: 目前MySQL数据库最常用的是主从架构,大多数高可用架构也是通过主从架构演变而来.但是主从架构运行时间长久后容易出现数据不一致的情况,比如因从库可写造成的误操作或者复制bug等,本篇文章将会详 ...

  9. rf中的条件判断与循环

    条件判断 run keyword if condition name *args ... ELSE IF conditon name *args ...ELSE name *args conditio ...

  10. 使用Js将页面打印或保存为Pdf

    很久没有写前端的文章了,今天就来说说js一个比较方便的功能,打印当前页面或保存成pdf吧. js有一个原生的函数,print(),顾名思义就是打印.但是有时候我们需要打印页面某些部分,所以需要对页面进 ...