Chủ Nhật, 24 tháng 4, 2022

PALINDR c++


#include<bits/stdc++.h>
using namespace std;

#define maxn 1000005

int n;
string s;
 int jmin,f[1000],t[1000];

bool kt(int i,int j)
{
    for(int k=i;k<=(i+j)/2+1;k++)
    {
      //  cout<<i<<" "<<j<<endl;
        if(s[k]!=s[j+i-k]) return false;

    }
    return true;
}

void truy_vet()
{
    string r="",a[300];
    int d=0;
    while(f[n]>0)
    {
        r="";
        for(int i=t[n]+1;i<=n;i++) r=r+s[i];
        d++;
        a[d]=r;
       // cout<<n<<endl;
        n=t[n];
    }
    for(int i=d;i>=1;i--)
        cout<<a[i]<<endl;
}

void giai() {


    f[0]=0;f[1]=1;
    for(int i=2;i<=n;i++)
    {
      //  cout<<"i="<<i<<endl;
        jmin=i-1;
       // cout<<f[jmin]<<endl;
        for(int j=0;j<=i-1;j++)
        {
            if(kt(j+1,i)==true&&f[jmin]>f[j])
            {
             //   cout<<(j+1)<<" "<<i<<endl;
                jmin=j;
               // t[i]=j;
            }
            f[i]=f[jmin]+1;
            t[i]=jmin;
        }
    }
  //  for(int i=1;i<=n;i++) cout<<f[i]<<" ";
 //   cout<<endl;
    cout<<f[n]<<endl;
    truy_vet();

}

int main()
{
   ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    freopen("palindr.inp", "r", stdin);
    freopen("palindr.out", "w", stdout);
   cin>>s;
   n=s.length();
   s=' '+s;
   giai();
}


Không có nhận xét nào:

Đăng nhận xét

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.