南阳理工904
2015-11-04 14:41
218 查看
search
时间限制:1000 ms | 内存限制:65535 KB
难度:2
描述 游戏积分的排行榜出来了,小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
坑死了啦!!!!!!sort();和stable_sort();
sort的应用;
1、可以传入两个参数;
sort(a,a+N) ,其中a是数组,a+N表示对a[0]至a[N-1]的N个数进行排序(默认从小到大排序);
2、传入三个参数;
sort(a,a+N,cmp),第三个参数是一个函数 ;
如果让函数从大到小排序,可以用如下算法实现;
bool cmp(int a,int b){return a>b};
sort(A,A+N,cmp);
而stable_sort的用法与sort一致,区别是stable_sort函数遇到两个数相等时,不对其交换顺序;这个应用在数组里面不受影响,当函数参数传入的是结构体时,会发现两者之间的明显区别;
代码:
时间限制:1000 ms | 内存限制:65535 KB
难度:2
描述 游戏积分的排行榜出来了,小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
坑死了啦!!!!!!sort();和stable_sort();
sort的应用;
1、可以传入两个参数;
sort(a,a+N) ,其中a是数组,a+N表示对a[0]至a[N-1]的N个数进行排序(默认从小到大排序);
2、传入三个参数;
sort(a,a+N,cmp),第三个参数是一个函数 ;
如果让函数从大到小排序,可以用如下算法实现;
bool cmp(int a,int b){return a>b};
sort(A,A+N,cmp);
而stable_sort的用法与sort一致,区别是stable_sort函数遇到两个数相等时,不对其交换顺序;这个应用在数组里面不受影响,当函数参数传入的是结构体时,会发现两者之间的明显区别;
代码:
#include<iostream> #include <stdio.h> #include <string> #include <algorithm> using namespace std; struct dot{ char name[20]; int n; }s[10005]; int cmp(dot a,dot b){ return a.n<b.n; } int main(){ long m,k,i,j,T; scanf("%d",&T); int mcp(int,int,int); while(T--){ scanf("%d%d",&k,&m); for(i=0;i<k;i++) scanf("%s%d",&s[i].name,&s[i].n); stable_sort(s,s+k,cmp); while(m--){ scanf("%d",&j); printf("%s\n",s[mcp(0,k-1,j)].name); } } return 0; } int mcp(int a,int b,int c){ int mid=(a+b)/2; if(a<=b){ if(c<s[mid].n) return mcp(a,mid-1,c); else if(c>s[mid].n) return mcp(mid+1,b,c); else{ if(s[mid].n==s[mid-1].n) return mcp(a,mid-1,c); else return mid; } } }
相关文章推荐
- MySQL单列索引和组合索引的选择效率与explain分析
- 基于QtQuick的二维码解码
- STM32F4之USART【库函数操作】
- win7不小心改成经典模式,如何改回来
- mysql语句性能分析
- MongoDB开发学习(2)索引的基本操作
- JavaWeb生成图片验证码
- 安装AD15有问题多数是因为旧版本AD软件没有卸载干净,清理方法详解
- 實戰案例 - 資料對接工具程式碼重構 (2)
- 真机和虚拟设备共存,测试程序如何选择设备
- 【转】lnmp_auto:自动化安装lnmp环境脚本
- java小白的成长路(一)
- UITableView的cell一些设置
- 使用git在本地创建一个项目的过程
- Metal Feature Set Tables
- Dynamic Code Evolution for Java dcevm 原理
- python包模块实例
- 真机调试相关
- 【原创教程】JavaScript详解之语法和对象
- HTTPS其实是有两部分组成:HTTP + SSL / TLS