求助
查看原帖
求助
437398
EastIsRed楼主2022/10/15 17:32
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int n;
char s[128][128];
int len[128];
int a[128],ins[26];
bool mp[26][26],used[26];
char ans[32];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%s",s[i]);
    for(int i=1;i<=n;i++)
    {
        int temp;
        scanf("%d",&temp);
        a[i]=temp;
        len[i]=strlen(s[temp]);
    }
    for(int i=1;i<n;i++)
    {
        int j=0;
        while(j<len[i]&&j<len[i+1]&&s[a[i]][j]==s[a[i+1]][j])
            j++;
        if(j>=len[i])
            continue;
        if(j>=len[i+1]&&j<len[i])
        {
            printf("NE");
            return 0;
        }
        if(!mp[s[a[i]][j]-'a'][s[a[i+1]][j]-'a'])
            mp[s[a[i]][j]-'a'][s[a[i+1]][j]-'a']=1,ins[s[a[i+1]][j]-'a']++;
    }
    queue<int>q;
    int tot=0;
    for(int i=0;i<26;i++)
        if(!ins[i])
            q.push(i),used[i]=true;
    while(q.size())
    {
        int now=q.front();
        q.pop();
        ans[tot++]=now+'a';
        for(int i=0;i<26;i++)
        {
            if(mp[now][i])
                ins[i]--;
            if(!ins[i]&&!used[i])
                q.push(i),used[i]=true;
        }
    }
    for(int i=0;i<26;i++)
        if(!used[i])
        {
            printf("NE");
            return 0;
        }
    printf("DA\n%s",ans);
    return 0;
}

60分,不知道错哪里了

2022/10/15 17:32
加载中...