关闭

浙大PAT甲级 1084

92人阅读 评论(0) 收藏 举报
分类:

先排序然后二分查找临界点。

AC代码:

#include<iostream>
#include<map>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<list>
#include<set>
#include<stack>
#include<cmath>
#include<vector>
#define ll long long
#define inf 999999999
using namespace std;
int n;
struct node
{
    string name;
    string id;
    int num;
};
node a[1000000];
bool cmp(node x,node y)
{
    return x.num>y.num;
}
int f(int x)
{
    int q=0,w=n-1;
    while(q<=w)
    {
       int mid=(q+w)/2;
    if(a[mid].num>x)
    {
        q=mid+1;
    }
    else if(a[mid].num<x)
    {
        w=mid-1;
    }
    else
    {
        return mid;
    }
    }
    return q;
}
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        cin>>a[i].name>>a[i].id>>a[i].num;
    }
    int l,r;
    scanf("%d %d",&l,&r);
    sort(a,a+n,cmp);
    int res=f(r);
    int flag=0;
    for(int i=res;;i++)
    {
        if(a[i].num>=l)
        {
            cout<<a[i].name<<" "<<a[i].id<<endl;
            flag=1;
        }
        else
        {
            break;
        }
    }
    if(flag==0)
    {
        printf("NONE\n");
    }
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11161次
    • 积分:970
    • 等级:
    • 排名:千里之外
    • 原创:91篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档