您的位置:首页 > 其它

NYOJ 904 search

2015-10-01 11:29 411 查看
首先想到的就是排序+二分,但又否决了,认为最可能应该是hash,看了下讨论,hash应该是最标准的,不过排序+二分也可以过....题上可是说最多10000个数据啊,排序这玩意能行?后台数据问题吧

排序+二分

#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]这时候表示未搜到最前面的结果,继续搜索
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: