求助!!!!
  • 板块P1127 词链
  • 楼主I_Love_Codm
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/25 17:51
  • 上次更新2025/7/25 22:43:10
查看原帖
求助!!!!
1436267
I_Love_Codm楼主2025/7/25 17:51
#include <stack>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

const int N = 1314;

string s[N];
vector<int> g[N];
stack<string> ans;
bool vis[N], flg = 0;
int n, d[N], st = -1, ed = -1;

void dfs(int u) {
	for (int &v: g[u]) {
		if (!vis[v]) {
			vis[v] = 1;
			dfs(v);
		}
	}

	ans.push(s[u]);
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin >> n;
	for (int i = 1; i <= n; i++)
	    cin >> s[i];

	sort(s + 1, s + 1 + n);
	for (int i = 1; i <= n; i++) {
		int pos = s[i].size() - 1;
		for (int j = 1; j <= n; j++) {
	    	if (i == j) continue ;
	    	if (s[i][pos] == s[j][0]) {
	    		g[i].push_back(j);
	    		d[j]++;
	    		d[i]--;
			}	    
		}
	}

    bool b = 0;
	for (int i = 1; i <= n; i++) {
		if (!d[i]) continue ;
    	if (d[i] == -1 && st == -1) st = i;
		else if (d[i] == 1 && ed == -1) ed = i;
		else {
			b = 1;
			break ;
		}
	}

	if (st != ed && min(st, ed) == -1) b = 1;
	if (b) {
		cout << "***";
		return 0;
	} 

	dfs(max(st, 1));
	while (ans.size()) {
		if (flg) cout << '.';
		else flg = 1;
		cout << ans.top();
		ans.pop();
	}
	return 0;
}
2025/7/25 17:51
加载中...