zoukankan      html  css  js  c++  java
  • NYOJ 904 search(stable_sort函数的应用)

    描述

    游戏积分的排行榜出来了,小z想看看得某个积分的人是谁。但是由于人数很多,他自己找很浪费时间,所以他想请你帮忙写一个程序,能快速的帮他找到他想要找的人
     
    输入
    多组测试数据,第一行有一个数T,表示有T组测试数据(T<=50)
    第二行有两个数n和m(1<=n,m<=10000),n表示有n个人,m表示有m次查询
    接下来n行,输入每个人的名字(长度小于10)和积分num(0<=num<=10^8),
    接下来m行,每个数表示要查询的积分(每次查询一定有结果)
    输出
    输出对应积分的人的名字(如果有多个人的积分相同,则输出最前面的那个)
    样例输入
    1
    5 3
    zhangsan 2
    qianxiao 5
    liuqiang 2
    wangwu 1
    lisi 3
    2
    1
    3
    样例输出
    zhangsan
    wangwu
    lisi
    来源
    原创
    上传者
    ACM_马振阳
    刚开始想的(但是效率太慢)
     1 #include <stdio.h>
     2 #include <math.h>
     3 #include <queue>
     4 #include <vector>
     5 #include <stack>
     6 #include <map>
     7 #include <string>
     8 #include <string.h>
     9 #include <algorithm>
    10 #include <iostream>
    11 using namespace std;
    12 int num[100000001];
    13 int main()
    14 {
    15     int t,n,m;
    16     string name[100];
    17     scanf("%d",&t);
    18     while(t--){
    19         scanf("%d %d",&n,&m);
    20         for(int i=0;i<n;i++){
    21             cin>>name[i]>>num[i];
    22         }
    23         for(int j=0;j<m;j++){
    24             int p;
    25             scanf("%d",&p);
    26             for(int i=0;i<n;i++){
    27                 if(p==num[i]){
    28                     cout<<name[i]<<endl;
    29                     break;
    30                 }
    31             }
    32         }
    33     }
    34     return 0;
    35 }
    要理解二分的过程,左和右...........
     1 #include <stdio.h>
     2 #include <math.h>
     3 #include <queue>
     4 #include <vector>
     5 #include <stack>
     6 #include <map>
     7 #include <string>
     8 #include <string.h>
     9 #include <algorithm>
    10 #include <iostream>
    11 using namespace std;
    12 struct node{
    13     char name[11];
    14     int num;
    15 }a[10005];
    16 bool cmp(node x,node y){
    17     return x.num<y.num;
    18 }
    19 int cf(int l,int r,int k){
    20     while(l<r){
    21         int mid=(l+r)/2;
    22         if(a[mid].num>k)
    23             r=mid;
    24         else if(a[mid].num<k)
    25             l=mid+l;
    26         else{
    27             if(a[mid].num==a[mid-1].num)
    28                 r=mid;
    29             else
    30                 return mid;
    31         }
    32     }
    33 }
    34 int main()
    35 {
    36     int n,m,t,i,j,k;
    37     scanf("%d",&t);
    38     while(t--){
    39         scanf("%d %d",&n,&m);
    40         for(i=0;i<n;i++){
    41             scanf("%s %d",a[i].name,&a[i].num);
    42         }
    43         stable_sort(a,a+n,cmp);
    44         for(j=0;j<m;j++){
    45             scanf("%d",&k);
    46             int p=cf(0,n,k);
    47             cout<<a[p].name<<endl;
    48         }
    49     }
    50     return 0;
    51 }
  • 相关阅读:
    机器学习与AI相关的资料
    基于React 的前端UI开发框架 及与Electron 的结合 https://cxjs.io/
    快速开发工具:Servoy
    求同网----专门解决物料编码问题!
    AUTOML --- Machine Learning for Automated Algorithm Design.
    iOS- 给App添加内购& 验证购买iOS7新特性
    ffmpeg在iOS的使用
    iOS小技巧:用runtime 解决UIButton 重复点击问题
    iOS应用性能调优的25个建议和技巧
    iOS js oc相互调用(JavaScriptCore)(二)
  • 原文地址:https://www.cnblogs.com/wangmengmeng/p/4710196.html
Copyright © 2011-2022 走看看