P1127词链64pts求调
  • 板块题目总版
  • 楼主kevin985
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/8/27 20:58
  • 上次更新2023/11/4 08:46:43
查看原帖
P1127词链64pts求调
384064
kevin985楼主2021/8/27 20:58
#include <bits/stdc++.h>
#define N 10100
#define rint register int
using namespace std;
int n;
string a[N];
map<char,int>s1,s2;
char s,t;
string start;
bool b[N];
int sum;
string ans[N];
inline void dfs(string s,int step)
{
//  cout<<s<<endl;
    if(step == n)
    {
        for(rint i=1;i<n;++i) cout<<ans[i]<<".";
        cout<<ans[n];
        exit(0);
    }
    for(rint i=1;i<=n;++i)
    {
        if(!b[i] && s[s.size() - 1] == a[i][0])
        {
            b[i] = 1;
            ans[step + 1] = a[i];
            dfs(a[i],step + 1); 
//          --sum;
            b[i] = 0;
        }
    }
}
int main()
{
    scanf("%d",&n);
    for(rint i=1;i<=n;++i)
    {
        cin>>a[i];
        ++s1[a[i][0]],++s2[a[i][a[i].size() - 1]];
    }
    sort(a + 1,a + n + 1);
    int cnt[2] = {0,0};
    for(char i='a';i<='z';++i)
    {
        if(s1[i] != s2[i])
        {
            if(s1[i] - s2[i] == 1) s = i;
            else if(s2[i] - s1[i] == 1) t = i;
        }
    }
    for(rint i=1;i<=n;++i)
    {
        if(a[i][0] == s && (a[i][a[i].size() - 1] != t || s2[t] != 1))
        {
            b[i] = 1;
            ans[++sum] = a[i];
            break;
        }
    }
//  cout<<start;
    dfs(ans[sum],1);
    printf("***");
    return 0;
}
2021/8/27 20:58
加载中...