成绩查询

1089: 成绩查询

Time Limit: 4000MS Memory Limit: 65536KB
Total Submit: 132 Accepted: 9 Page View: 81
Submit  Status  Discuss

NOIP乐山一中模拟赛的成绩出来了,很多同学急切的想知道自己的成绩,所以经学校商量后决定在网站上公布。但时间很紧!现在提供每个人的用户名、成绩,需要你将成绩排序并根据用户输入的成绩排名输出对应的用户名和排名(成绩少的排名靠前,因为noip题目用的时间越少,排名越靠前)。成绩相同的,用户名字典序小的排名靠前

    第一行是一个正整数n,表示OIer数。
    接下来的n 行每行有一个字符串和一个小数,第i 行是编号为i-1 的人的信息,中间用一个空格分隔,字符串代表用户名(只能由大、小写字母,数字和下划线组成),小数代表该人的成绩,每行的首尾不会有多余的空格。
    然后是一个正整数m,表示查询的次数。
    接下来m 行是每一次查询的信息,每行一个实数k。
    对应每一个数k,你都要输出用时为k 且排名最靠前的OIer的用户名及排名(一个正整数),中间用一个空格分隔,如果没有符合条件的人的话就输出”No This OIer”(没有两边的引号)。
5
sqybi 123.345
Core2_Duo 20.203
Vista123 100
o 100.001
0987654321 987654321
2
100.0
123.346
Vista123 2
No This OIer
    对于100%数据,每个人的成绩且都小于10^9,有效位数最多为9 位,小数点后最多三位;每个人的用户名都不相同;k 的范围和每个人成绩的范围相同;每个人的用户名长度不超过10个字节。
对于100%数据,n≤100000,m≤100000。
    输入的成绩和查询的成绩只要值相同就算相等,如123.1 与123.100 是同一个数。 


#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define eps 1e-5
using namespace std;
struct people
{
    char na[15];
    double gr;
    people(){}       //无参构造函数
    people(double g) //有参构造函数,这两个必须加
    {
        gr=g;
    }
    bool operator<(const people a) const
    {
        if(abs(gr-a.gr)<=eps) return na<a.na;
        else return gr<a.gr;
    }
}p[100005];
int main()
{
    int n,m;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%s%lf",p[i].na,&p[i].gr);
    }
    sort(p,p+n);
    scanf("%d",&m);
    for(int i=0;i<m;i++)
    {
        double xx;
        scanf("%lf",&xx);
        int No=lower_bound(p,p+n,people(xx-eps))-p;           //返回大于等于xx-eps的最小指针,所以需要减去头指针p
        if((p[No].gr-xx)<=eps)
            printf("%s %d\n",p[No].na,No+1);          //数组是从0开始,No要加1
        else printf("No This OIer\n");
    }
    return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值