NYOJ 904 search
2015-10-01 11:29
411 查看
首先想到的就是排序+二分,但又否决了,认为最可能应该是hash,看了下讨论,hash应该是最标准的,不过排序+二分也可以过....题上可是说最多10000个数据啊,排序这玩意能行?后台数据问题吧
排序+二分
注意排序使用stable_sort,以及a[mid]==a[mid-1]这时候表示未搜到最前面的结果,继续搜索
排序+二分
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct score { char name[11]; int sco; }a[10005]; bool comp(score a1,score a2) { return a1.sco < a2.sco; } int Binary_search(int l, int r, int k) { while(l <= r) { int mid = (l + r) / 2; if(a[mid].sco > k) r = mid; else if(a[mid].sco < k) l = mid+1; else { if(a[mid].sco == a[mid - 1].sco) r = mid; else return mid; } } } int main() { int t, n, m, i, k; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i = 0; i < n; i++) scanf("%s%d",a[i].name,&a[i].sco); stable_sort(a,a+n,comp); for(i = 0; i < m; i++) { scanf("%d",&k); int p = Binary_search(0,n,k); printf("%s\n",a[p].name); } } return 0; }
注意排序使用stable_sort,以及a[mid]==a[mid-1]这时候表示未搜到最前面的结果,继续搜索
相关文章推荐
- 两个很大的数相乘
- 网站白名单过滤Java代码
- Quartz2D绘图<四>图形填充
- 【UML】行为图(状态图&活动图)
- USACO 2.2 Preface Numbering (模拟)
- java-design- flyweight
- 我的博客地址
- 黑马程序员——Java语言多线程
- Operating System: Three Easy Pieces --- Process (Note)
- MySQL的一些常用的SQL语句整理
- MySQL的一些常用的SQL语句整理
- 乘积最大子序列
- BZOJ 3368 约翰看山(扫描)O(N)
- mongodb基本指令
- 2015年下半年真题强化班二:软考办出题全部来自于指定教程一句话,而不是培训讲义
- hdu 5476 Explore Track of Point(几何)
- c# HttpWebRequest 代码手动设置cookies的简单办法
- 深入理解C++三大特性之一 ——多态
- 函数进阶
- 伸展树模板