poj2503
这个题用vector反而比我老老实实用数组zd[100000]还慢,代码还是不够好,待改进。
代码如下:
#include <iostream>
#include <string>
#include <algorithm>//sort
#include<stdio.h>
using namespace std;
int efsearch(string arr[],int& le,string& data)
{
int l = 0;
int r = le-1;
int mid = 0;
while(l <= r)
{
mid = l + (r-l)/2;
if(arr[mid] > data){
r = mid-1;
}
else if(arr[mid] < data){
l = mid+1;
}
else if(data == arr[mid])
return mid;
}
return -1;
}
string zd[100000];//字典
string zd2[100000];
int main(){
string xx;
int znum = 0 ;//字典数目
while(getline(cin,zd[znum]) && zd[znum] != ""){
znum++;
}
for(int j = 0;j < znum;j++){
int k = zd[j].find(" ");
zd[j] = zd[j].substr(k+1,zd[j].length()-1) +" "+ zd[j].substr(0,k);
}
sort(zd,zd+znum);
for(int j = 0;j < znum;j++){
int k = zd[j].find(" ");
zd2[j] = zd[j].substr(0,k);
}
while(cin>>xx){
int x = efsearch(zd2,znum,xx);
if(x == -1){
cout<<"eh"<<endl;
continue;
}
int k = zd[x].find(" ");
cout<<zd[x].substr(k+1,zd[x].length()-1)<<endl;
}
return 0;
}