求救大佬!!!

回复帖子

@lyslys 2019-05-16 09:09 回复

在Cpp里都没问题的呀 为什么全WA了?


#include<cmath>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
int len1,len2,len_st,t;
int a[1000],n;
long long Max;
char s[100][100];
bool F;
int search(char s1[100],char s2[100])
{
    len1=strlen(s1);
    len2=strlen(s2);
    for(int i=1;i<min(len1,len2);++i)
    {
        F=true;
        for(int j=0;j<i;++j)
            if(s1[len1-i+j]!=s2[j])
            {
                F=false;
                break;
            }
        if(F) return i;
    }
    return 0;
}
void DFS(char st[100],int len)
{
    if(Max<len) Max=len;
    for(int i=1;i<=n;++i)
    {
        if(a[i]>=2) continue;
        t=search(st,s[i]);
        if(t>0)
        {
            a[i]++;
            DFS(s[i],len+strlen(s[i])-t);
            a[i]--;
        }
    }
}
int main()
{

    scanf("%d",&n);
    gets(s[1]);
    for(int i=1;i<=n+1;++i)
        gets(s[i]);
    for(int i=1;i<=n;++i)
    {
        if(s[i][0]==s[n+1][0])
        {
            a[i]=1;
            DFS(s[i],strlen(s[i]));
        }
    }
    cout<<Max;
    return 0;
}
@三生万物 2019-05-16 12:02 回复

其实你只需要删掉

gets(s[1]);

然后再把

gets(s[i]);改成cin >> s[i];

就可以过了QAQ

@三生万物 2019-05-16 12:02 回复

为什么不用string类型呢? 附代码:(在你的代码上修改的)

#include<bits/stdc++.h>
using namespace std;
int len1,len2,len_st,t;
int a[1000],n;
long long Max;

string s[100];
//一个string就相当于一个字符串 

bool F;
int search(string s1,string s2) {
    len1=s1.size();
    len2=s2.size();
    for(int i=1; i<min(len1,len2); ++i) {
        F=true;
        for(int j=0; j<i; ++j)
            if(s1[len1-i+j]!=s2[j]) {
                F=false;
                break;
            }
        if(F) return i;
    }
    return 0;
}
void DFS(string st, int len) {
    if(Max<len) Max=len;
    for(int i=1; i<=n; ++i) {
        if(a[i]>=2) continue;
        t=search(st,s[i]);
        if(t>0) {
            a[i]++;
            DFS(s[i],len+s[i].size()-t);
            a[i]--;
        }
    }
}
int main() {
    scanf("%d",&n);
    for(int i=1; i<=n+1; ++i) cin >> s[i];
    for(int i=1; i<=n; ++i) {
        if(s[i][0]==s[n+1][0]) {
            a[i]=1;
            DFS(s[i],s[i].size());
            //求string类型的长度需用size()函数 
        }
    }
    cout<<Max;
    return 0;
}