poj 3080

来源:互联网 发布:如何用c语言做贪吃蛇 编辑:程序博客网 时间:2024/06/04 17:43

这也是一个简单的字符串比较问题。

题目大意是:给出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;}
   elsebreak;
  }
  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)
   {
    intk = y, g = i;
    for(; k < sum2 + k ; k++)
    {
     if(base[0][k]< base[0][g])  break;
     elseif(base[0][k] > base[0][g])  {y = i ;break;}
     g+= 1;
    }
   }
  }
  if(max <3)  cout<<"no significantcommonalities"<<endl;
  else 
  {
   for(i = y ; i< y+max ; i++)
    cout<<base[0][i];
   cout<<endl;
  }
 }
 return 0;
}

0 0
原创粉丝点击