题意:判断一些句子是不是另一些句子的前缀,并统计是的个数。
题解:将被匹配串读入结构体中排序,然后对于每个匹配串,通过二分在结构体中找。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int M=1005,N=10005; 6 struct data 7 { 8 char s[100]; 9 bool operator<(const data &ne)const 10 { 11 return strcmp(s,ne.s)<=0; 12 } 13 }pr[M]; 14 int main() 15 { 16 int n,m; 17 scanf("%d%d ",&m,&n); 18 for(int i=0;i<m;i++) 19 gets(pr[i].s); 20 sort(pr,pr+m); 21 int cnt=0; 22 for(int i=0;i<n;i++) 23 { 24 char s[100]; 25 gets(s); 26 int len=strlen(s); 27 for(int ll=0,rr=m-1,mid;ll<=rr;) 28 { 29 mid=(ll+rr)>>1; 30 int tp=strncmp(pr[mid].s,s,len); 31 if(tp<0) 32 ll=mid+1; 33 else if(tp>0) 34 rr=mid-1; 35 else 36 cnt++,ll=rr+1; 37 } 38 } 39 printf("%d\n",cnt); 40 return 0; 41 }