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

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


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

#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map> #define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 501
#define MAX 0x06FFFFFF using namespace std; typedef struct Student{
string name;
int gp,gm,gf,G;
Student(){
gp=,gm=,gf=,G=;
}
Student(string n,int p,int m,int f,int g){
name=n;
gp=p,gm=m,gf=f,G=g;
}
bool operator < (Student const & o)const
{
if(G<o.G) return true;
else if(G==o.G) return name<o.name;
}
}Student;
Student output[]; #define MAP map<string,Student*> MAP info;
bool cmp(Student a,Student b); int main() {
freopen("d:/input/A1137.txt","r",stdin);
int P,M,F,t;
char buffer[];
scanf("%d %d %d",&P,&M,&F);
while(P-->){
I("%s",buffer);
scanf("%d",&t);
string name(buffer);
MAP::iterator it=info.find(name);
Student * tmp;
if(it==info.end()){
tmp=new Student;
tmp->gp=t;
tmp->name=name;
info[name]=tmp;
}else{
tmp=it->second;
tmp->gp=t;
}
}
while(M-->){
I("%s",buffer);
scanf("%d",&t);
string name(buffer);
MAP::iterator it=info.find(name);
Student * tmp;
if(it==info.end()){
tmp=new Student;
tmp->gm=t;
tmp->name=name;
info[name]=tmp;
}else{
tmp=it->second;
tmp->gm=t;
}
}
while(F-->){
I("%s",buffer);
scanf("%d",&t);
string name(buffer);
MAP::iterator it=info.find(name);
Student * tmp;
if(it==info.end()){
tmp=new Student;
tmp->gf=t;
tmp->name=name;
info[name]=tmp;
}else{
tmp=it->second;
tmp->gf=t;
}
}
int n,i=;
MAP::iterator it=info.begin();
while(it!=info.end()){
Student * p=it->second;
int gp,gm,gf,G;
gp=p->gp;gm=p->gm,gf=p->gf;
string name=p->name;
if(!(gp< || gf< || gf >)){
if(gm==) gm=-;
if(gf>=gm) G=gf;
else{
G=round(0.4*(double)gm+0.6*(double)gf);
}
output[i++]=Student(name,gp,gm,gf,G);
}
it++;
}
n=i;
sort(output,output+n,cmp);
FF(i,n){
O("%s %d %d %d %d\n",output[i].name.c_str(),output[i].gp,output[i].gm,output[i].gf,output[i].G);
}
return ;
} bool cmp(Student a,Student b){
if(a.G>b.G) return true;
else if(a.G==b.G) return a.name<b.name;
return false;
}

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

#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map> #define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 501
#define MAX 0x06FFFFFF using namespace std; typedef struct Student{
string name;
int gp,gm,gf,G;
Student(){
gp=,gm=,gf=,G=;
}
Student(string n,int p,int m,int f,int g){
name=n;
gp=p,gm=m,gf=f,G=g;
}
}Student; Student students[]; #define MAP map<string,int> MAP name2index; bool cmp(Student a,Student b); int main() {
freopen("d:/input/A1137.txt","r",stdin);
int P,M,F,t;
char buffer[];
scanf("%d %d %d",&P,&M,&F);
int cnt=;
while(P-->){
I("%s",buffer);
scanf("%d",&t);
string name(buffer);
if(t>=){
name2index[name]=cnt;
students[cnt++]=Student(name,t,-,-,-);
}
}
while(M-->){
I("%s",buffer);
scanf("%d",&t);
string name(buffer);
int index=name2index[name];
if(index>){
students[index].gm=t;
}
}
while(F-->){
I("%s",buffer);
scanf("%d",&t);
string name(buffer);
int index=name2index[name];
if(index>){
students[index].gf=t;
}
}
int i;
FF(i,cnt){
Student &tmp=students[i];
if(tmp.gf>=tmp.gm) tmp.G=tmp.gf;
else{
double t=tmp.gm*+tmp.gf*;
t/=;t+=0.5;
tmp.G=t;
}
if(tmp.G<) tmp.G=-;
}
sort(students+,students+cnt,cmp);
F(i,,cnt+){
if(students[i].G>=)
O("%s %d %d %d %d\n",students[i].name.c_str(),
students[i].gp,students[i].gm,students[i].gf,students[i].G);
}
return ;
} bool cmp(Student a,Student b){
if(a.G==-) return false;
if(a.G>b.G) return true;
else if(a.G==b.G) return a.name<b.name;
return false;
}

需要注意的点:

  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. 阿里云RDS数据库sql server 导入数据并添加作业小结

    在阿里云购买ECS服务器和RDS数据库时,要注意网络类型要一致,最好都是VPC,否则ECS不能在内网访问RDS,只能从外网访问:在RDS控制台左侧,数据库安全性的IP白名单中添加ECS外网IP:在数据 ...

  2. C#读写修改设置调整UVC摄像头画面-缩放

    有时,我们需要在C#代码中对摄像头的缩放进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像 ...

  3. Smack 4.3.4 API

      Smack 4.3.4 API 包 包 描述 org.igniterealtime.smack.smackrepl Smack的REPL(读取评估打印循环). org.jivesoftware.s ...

  4. python爬虫---单线程+多任务的异步协程,selenium爬虫模块的使用

    python爬虫---单线程+多任务的异步协程,selenium爬虫模块的使用 一丶单线程+多任务的异步协程 特殊函数 # 如果一个函数的定义被async修饰后,则该函数就是一个特殊的函数 async ...

  5. C++ GDI图形设备接口

    一.概念 1. GDI:(Graphics Device Interfase)图形设备接口,是一个应用程序与输出设备之间的中介. 一方面,GDI向应用程序提供一个与设备无关的编程环境,另一方面,它又以 ...

  6. MongoDB常用数据库命令第二集

    =======================基础命令======================= mongo 进入数据库操作界面db 查看当前使用的数据库show dbs 查看当前已经被创建出来的 ...

  7. Beego 学习笔记7:JS分页

    JS分页 1>     JS分页,业务逻辑 (1)     分页采用的是一个叫jquery.pagination.js的一个jquery插件 (2)     需要jquery的支持,此项目中使用 ...

  8. GitHub Python项目推荐|瓦力Devops开源项目代码部署平台持续部署

    GitHub Python项目推荐|walle - 瓦力 Devops开源项目代码部署平台 项目热度 标星(star):8418 (很不错的实用项目,大神作品,建议关注) 标星趋势 关注(watch) ...

  9. RabbitMQ基本概念(一)-RabbitMQ的优劣势及产生背景

    本篇并没有直接讲到技术,例如没有先写个Helloword.我想在选择了解或者学习一门技术之前先要明白为什么要现在这个技术而不是其他的,以免到最后发现自己学错了.同时如果已经确定就是他,最好先要了解下技 ...

  10. Java基础--static关键字

    不管是平时阅读源代码,还是笔试.面试中,static关键字还是经常被问道,这篇文章主要来重新复习一下该关键字. 一.static用途 static方便在没有创建对象的时候调用方法或者变量. stati ...