九度OJ 1069 二分查找问题
2014-02-27 19:54
323 查看
题目链接:http://ac.jobdu.com/problem.php?pid=1069
简单的二分查找算法,之所以把这个记录下来是因为我在这里载了40多分钟,本来10分钟就写完了程序测试也对了,但就是AC不了。后来经过各种修改无果后在论坛的交流区看了看才发现原来是学号的数组开得太小了。诚然我可能是OJ系统的问题没有描述清楚要求,但也值得吸取教训不能在规定的时间AC就是会也得不到分。谨记细节上的错误!
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct Student{
char no[100];
char name[50];
char sex[20];
int age;
}buf[1000];
bool cmp(Student a,Student b){
return strcmp(a.no,b.no)<0?1:0;
}
int Search(Student buf[],char no[],int n){
int low,mid,high;
low=0;high=n-1;
while(low<=high){
mid=(low+high)/2;
int temp=strcmp(buf[mid].no,no);
if(temp==0)
return mid;
else if(temp<0)
low=mid+1;
else high=mid-1;
}
if(low>high)
return -1;
}
int main(){
int n,m;
char searchNum[10000][100];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s%s%s%d",buf[i].no,buf[i].name,buf[i].sex,&buf[i].age);
}
scanf("%d", &m);
for(int i=0;i<m;i++){
scanf("%s", searchNum[i]);
}
sort(buf,buf+n,cmp);
for(int i=0;i<m;i++){
int ans=Search(buf,searchNum[i],n);
if(ans==-1)
printf("No Answer!\n");
else
printf("%s %s %s %d\n",buf[ans].no,buf[ans].name,buf[ans].sex,buf[ans].age);
}
return 0;
}
简单的二分查找算法,之所以把这个记录下来是因为我在这里载了40多分钟,本来10分钟就写完了程序测试也对了,但就是AC不了。后来经过各种修改无果后在论坛的交流区看了看才发现原来是学号的数组开得太小了。诚然我可能是OJ系统的问题没有描述清楚要求,但也值得吸取教训不能在规定的时间AC就是会也得不到分。谨记细节上的错误!
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct Student{
char no[100];
char name[50];
char sex[20];
int age;
}buf[1000];
bool cmp(Student a,Student b){
return strcmp(a.no,b.no)<0?1:0;
}
int Search(Student buf[],char no[],int n){
int low,mid,high;
low=0;high=n-1;
while(low<=high){
mid=(low+high)/2;
int temp=strcmp(buf[mid].no,no);
if(temp==0)
return mid;
else if(temp<0)
low=mid+1;
else high=mid-1;
}
if(low>high)
return -1;
}
int main(){
int n,m;
char searchNum[10000][100];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s%s%s%d",buf[i].no,buf[i].name,buf[i].sex,&buf[i].age);
}
scanf("%d", &m);
for(int i=0;i<m;i++){
scanf("%s", searchNum[i]);
}
sort(buf,buf+n,cmp);
for(int i=0;i<m;i++){
int ans=Search(buf,searchNum[i],n);
if(ans==-1)
printf("No Answer!\n");
else
printf("%s %s %s %d\n",buf[ans].no,buf[ans].name,buf[ans].sex,buf[ans].age);
}
return 0;
}
相关文章推荐
- 二分查找,背包问题v3
- 编程之美3.11 二分查找常见问题
- 经典二分查找问题
- 面试OR笔试40——二分查找一个函数解决多个问题
- 九度题目1069:查找学生信息(二分查找)
- 二分查找中的边界问题:+1,-1,<,<=
- [LintCode] 经典二分查找问题 - Java
- 【二分查找】及相关问题
- leetcode二分查找问题整理
- Uva 714 (抄书问题,二分查找+贪心)
- 二分查找(Binary Search)需要注意的问题,以及在数据库内核中的实现
- 问题 A: 二分查找
- 经典二分查找问题-LintCode
- 九度oj 题目1069:查找学生信息--字典
- 关于二分查找的多个问题
- HDU 2199 || HDU 2899 (二分查找+数学问题)
- 二分查找非递减序列的边界问题
- 【LintCode 简单】457. 经典二分查找问题
- [经典面试题]二分查找问题汇总
- 二分查找的越界和死循环问题