您的位置:首页 > 其它

poj 3080

2013-12-14 20:01 344 查看
这也是一个简单的字符串比较问题。

题目大意是:给出M个字符串系列,每个系列有60个字符,求这些字符串最长的相同子串,若有多个相同长度的字符,则输出字典序最小那个。

#include

#include

using namespace std;

char base[11][66] ;

int fun(int x , int y)

{

 int i , j , n = 0 , sum2 = 0 , sum1;

 while(n < 58)

 {

  sum1 = 0;j = n;

  for(i = x ; i < 60
;i++)

  {

   if(base[0][i]
== base[y][j]){sum1 += 1 ; j+= 1;}

   else
break;

  }

  if(sum1 >
sum2)  sum2 = sum1;

  n+=1;

 }

 return sum2;

}

int main()

{

 int t;

 cin>>t;

 while(t--)

 {

  int i , j , max = 0 , m ,
y;

  cin>>m;

  for(i = 0 ; i < m;
i++)

   cin>>base[i];

  for(i = 0 ; i < 58 ;
i++)

  {

//   int n = 1
;

   int sum1 = 0
, sum2 = 60;

   for(j = 1 ; j
< m ; j++)

   {

    sum1
= fun(i , j);

    if(sum1
< sum2)  sum2 = sum1;

   }

   if(sum2 >
max) {max = sum2;  y = i;}

   else if(sum2
== max)

   {

    int
k = y, g = i;

    for(
; k < sum2 + k ; k++)

    {

     if(base[0][k]
< base[0][g])  break;

     else
if(base[0][k] > base[0][g])  {y = i ;
break;}

     g
+= 1;

    }

   }

  }

  if(max <
3)  cout<<"no significant
commonalities"<<endl;

  else 

  {

   for(i = y ; i
< y+max ; i++)

    cout<<base[0][i];

   cout<<endl;

  }

 }

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: