您的位置:首页 > 其它

ZOJ 1170 String Matching

2013-03-19 20:30 302 查看
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <functional>
#include <string>
using namespace std;

char str1[10000],str2[10000];

int match(int as,int ae,int bs,int be)
{
int con=0;
int i,j;
for(i=as,j=bs; i<ae&&j<be; i++,j++)
{
if(str1[i]==str2[j])
con++;
}
return con;
}
int gcd(int a,int b)
{
if(a==0)
return b;
else
return b==0?a:gcd(b,a%b);
}
int main()
{
while(scanf("%s",str1)!=EOF)
{
if(strcmp(str1,"-1")==0)
break;
scanf("%s",str2);
int maxm=0;
int len1=strlen(str1);
int len2=strlen(str2);
for(int i=0; i<len1; i++)
{
int res=match(i,len1,0,len2);
if(maxm<res)
maxm=res;
}
for(int i=0; i<len1; i++)
{
int res=match(0,len1,i,len2);
if(maxm<res)
maxm=res;
}
if(maxm==0)
printf("appx(%s,%s) = 0\n",str1,str2);
else
{
maxm=maxm*2;
int minn=gcd(maxm,len2+len1);
if(maxm==len2+len1)
printf("appx(%s,%s) = %d\n",str1,str2,(len2+len1)/minn);
else
{
printf("appx(%s,%s) = %d/%d\n",str1,str2,maxm/minn,(len2+len1)/minn);
}
}
}
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: