社区讨论

求助,数据在本地AC提交WA

P1019[NOIP 2000 提高组] 单词接龙(疑似错题)参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m3s27b6o
此快照首次捕获于
2024/11/22 09:25
去年
此快照最后确认于
2025/11/04 14:13
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n, a[21][21], vis[21], ans;
string s[21];
char ch;
int calc(int x, int y) {
	int len = min(s[x].size(), s[y].size())-1, mx = 0;
	for(int i = 1;i <= len;++i) {
		string s1 = s[x].substr(s[x].size()-i, i);
		string s2 = s[y].substr(0, i);
		if(s1 == s2) mx = i;
	}
	return mx;
}
void dfs(int id, int len) {
	for(int i = 1;i <= n;++i) {
		if(vis[i] && a[id][i]) {
			--vis[i];
			dfs(i, len+s[i].size()-a[id][i]);
			++vis[i];
		}
	}
	ans = max(ans, len);
	return;
}
int main () {
    scanf("%d", &n);
    for(int i = 1;i <= n;++i) cin >> s[i];
    for(int i = 1;i <= n;++i)
    	for(int j = 1;j <= n;++j) 
    		a[i][j] = calc(i, j);
	getchar();
	scanf("%c", &ch);
    for(int i = 1;i <= n;++i)
    	if(s[i][0] == ch) {
    		fill(vis+1, vis+n+1, 2), vis[i] = 1;
    		dfs(i, s[i].size());
		}
	printf("%d", ans);
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...