| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
郁闷谁人知~qsort and bsearch~但是我一直超时 调了两个小时 最后发现居然是一个小错误 无语~
不过我还有2个问题想请教各位达人
一是我用c++比G++时间少800多MS,why?(指的是下面的第一段代码之间比较(编译器不同))
二是我用另一段貌似差不多的代码,结果第二段代码(g++编译)和第一段代码用c++编译的时间差不多。吾甚不解,试请教之~
代码一
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char temp[1000]={0};
char eh[]={"eh"};
struct dic
{
char enword[12];
char foword[12];
};
dic a[100000];
int cmp(const void *a,const void *b)
{
return strcmp(((dic*)a)->foword,((dic*)b)->foword);
}
/////////////////////////////////////////////////////////
int main ()
{
int i,len=0;
int front,rear,mid;
for(i=0;;i++)
{
cin.getline(temp,1000);
if(strlen(temp)==0)
break;
sscanf(temp,"%s%s",a[i].enword,a[i].foword);
len++;
}
qsort(a,len,sizeof(a[0]),cmp);
while(scanf("%s",temp)!=EOF)
{
front=0;
rear=len-1;
while(front<=rear)
{
mid=(front+rear)/2;
if(strcmp(temp,a[mid].foword)==0)
{
printf("%s\n",a[mid].enword);
break;
}
if(strcmp(temp,a[mid].foword)>0)
{
front=mid+1;
continue;
}
else
{
rear=mid-1;
continue;
}
}
if(front>rear)
printf("%s\n",eh);
}
return 0;
}
代码二
#include<iostream>
#include<cstring>
using namespace std;
char temp[25];
struct dic
{
char enword[12];
char foword[12];
};
dic a[100000];
int cmp(const void *a,const void *b)
{
return strcmp(((dic*)a)->foword,((dic*)b)->foword);
}
int compare(const void *a,const void *b)
{
return strcmp((char*)a,((dic*)b)->foword);
}
/////////////////////////////////////////////////////////
int main ()
{
int i,len=0;
for(i=0;;i++)
{
gets(temp);
if(strlen(temp)==0)
break;
int j=0,k=0;
for(;temp[j]!=' ';j++)a[len].enword[j]=temp[j];
a[len].enword[j]='\0';
for(j++;temp[j]!='\0';j++,k++)a[len].foword[k]=temp[j];
a[len].foword[k]='\0';
len++;
}
qsort(a,len,sizeof(a[0]),cmp);
while(scanf("%s",temp)!=EOF)
{
dic * pItem;
pItem = (dic *)bsearch (temp, a, len, sizeof (dic), compare);
if(pItem!=NULL)
puts(pItem->enword);
else printf("eh\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator