数据求解
查看原帖
数据求解
1122530
elpsconr楼主2024/4/16 01:27

这算hack数据吗? hack:2 atb atbttat a 俩单词总长才10,结果输出"龙"长13,这怎么可能。这个字符串是长啥样的?

##以下代码与题解代码输入上述hack数据都为13##

#include<bits/stdc++.h>
using namespace std;
string s[25];char ch;
int n,a[25][25];
int ans,an,st[30];
int find(int x,int y)
{
    int pp=1,z=0;
    for(int i=s[x].size()-1;i+1;--i)
    {
        for(int j=i;j<(int)s[x].size();++j)
        {
           // cout<<s[x][j]<<" "<<s[y][z]<<endl;
            if(s[x][j]!=s[y][z++])
            {
                pp=0;break;
            }
        }            
        if(pp) return s[x].size()-i;
        z=0;pp=1;
    }
    return 0;
}
void dfs(int p)
{
    int x=0;
    for(int i=1;i<=n;++i)
    {
        if(st[i]>1) continue;
        if(!a[p][i]) continue;
        if(a[p][i]==(int)s[p].size()||a[p][i]==(int)s[i].size()) continue;
        an+=s[i].size()-a[p][i];
        st[i]++;
        x=1;
        dfs(i);
        an-=s[i].size()-a[p][i];
        st[i]--;
    }
    if(!x) ans=max(ans,an);
}
int main()
{
    cin>>n;    
    for(int i=1;i<=n;++i) cin>>s[i];
    cin>>ch;
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=n;++j) a[i][j]=find(i,j);
    }
   for(int i=1;i<=n;++i)
   {
    if(s[i][0]==ch) 
    {
        st[i]=1;
        an=s[i].size();
        dfs(i);
        st[i]=0;
    }
   }
   cout<<ans<<endl;
   return 0;
}
2024/4/16 01:27
加载中...