zoukankan      html  css  js  c++  java
  • 【t043】成绩查询

    Time Limit: 1 second
    Memory Limit: 128 MB

    【问题描述】

    说起测试计算机的软件,排在第一位的就应当是SuperPi 了。它不但能良好的体现机器的整体水平,而且还很小巧,更令人惊讶
    的是它是一款绿色软件!SuperPi 的成绩是用毫秒计算的,如果时间越短说明成绩越好。大家都经常会把自己的SuperPi 成绩发
    布到网上,以和别人比较,当然也是为了炫耀自己的机器。这样,有些网站就要对大家的成绩进行排序并输出,另外一些技术比
    较完善的网站就会提供成绩查询的功能。现在,你就要完成这样一个查询程序。
    现在提供每个人的用户名、成绩,需要你将成绩排序并根据用户输入的排名输出对应的用户名和成绩。
    【输入格式】

    第一行是一个正整数n,表示用户的个数。
    接下来的n 行每行有一个字符串和一个小数,第i 行是编号为i-1 的人的信息,中间用一个空格分隔,字符串代表用户名(只能由大
    、小写字母,数字和下划线组成),小数代表该人的成绩,每行的首尾不会有多余的空格。
    然后是一个正整数m,表示查询的次数。
    接下来m 行是每一次查询的信息,每行一个实数k。
    【输出格式】

    对应每一个数k,你都要输出用时为k 的人的用户名及排名(一个正整数),中间用一个空格分隔,如果没有符合条件的人的话就输
    出”No Such User”(没有两边的引号)。 【数据范围】 对于10%数据,n≤100,m≤100。
    对于30%数据,n≤100000,m≤100。
    对于100%数据,n≤100000,m≤1000。
    对于100%数据,每个人的成绩各不相同且都小于10^9,有效位数最多为9 位,小数点后最多三位;每个人的用户名都不相同;k 的范
    围和每个人成绩的范围相同;每个人的用户名长度不超过10 个字节。
    【说明】
    输入的成绩和查询的成绩只要值相同就算相等,如123.1 与123.100 是同一个数。
    Sample Input

    5
    sqybi 123.345
    Core2_Duo 20.203
    Vista123 100
    o 100.001
    0987654321 987654321
    2
    100.0
    123.346

    Sample Output

    Vista123 2
    No Such User

    【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t043

    【题解】

    把输入的数据按照成绩升序排一下就好
    1.200
    和1.20
    直接用==号比较就可以了;
    在询问的时候写个二分就好;

    【完整代码】

    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <set>
    #include <map>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <queue>
    #include <vector>
    #include <stack>
    #include <string>
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define mp make_pair
    #define pp push_back
    #define fi first
    #define se second
    
    using namespace std;
    
    typedef pair<int,int> pii;
    typedef pair<LL,LL> pll;
    
    void rel(LL &r)
    {
        r = 0;
        char t = getchar();
        while (!isdigit(t) && t!='-') t = getchar();
        LL sign = 1;
        if (t == '-')sign = -1;
        while (!isdigit(t)) t = getchar();
        while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
        r = r*sign;
    }
    
    void rei(int &r)
    {
        r = 0;
        char t = getchar();
        while (!isdigit(t)&&t!='-') t = getchar();
        int sign = 1;
        if (t == '-')sign = -1;
        while (!isdigit(t)) t = getchar();
        while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
        r = r*sign;
    }
    
    //const int MAXN = x;
    const int dx[5] = {0,1,-1,0,0};
    const int dy[5] = {0,0,0,-1,1};
    const double pi = acos(-1.0);
    const int MAXN = 1e5+100;
    
    struct abc
    {
        char s[20];
        double t;
    };
    
    int n,m;
    abc a[MAXN];
    
    bool cmp(abc a,abc b)
    {
        return a.t < b.t;
    }
    
    int main()
    {
        //freopen("F:\rush.txt","r",stdin);
        rei(n);
        rep1(i,1,n)
            scanf("%s%lf",a[i].s,&a[i].t);
        sort(a+1,a+1+n,cmp);
        rei(m);
        rep1(i,1,m)
        {
            double x;
            scanf("%lf",&x);
            int l = 1,r = n,ans = -1,mid;
            while (l <= r)
            {
                mid = (l+r)>>1;
                if (a[mid].t==x)
                {
                    ans = mid;
                    break;
                }
                else
                    if (a[mid].t<x)
                        l = mid+1;
                    else
                        r = mid-1;
            }
            if (ans == -1)
                puts("No Such User");
            else
                printf("%s %d
    ",a[mid].s,mid);
        }
        return 0;
    }
    
  • 相关阅读:
    第五周作业
    关于结对编程的理解
    第四周作业
    总结
    总结
    总结
    总结
    总结
    判断树、判断表
    总结
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626939.html
Copyright © 2011-2022 走看看