社区讨论
爆拼67pts,第二个测试点没整明白,求指点
P1019[NOIP 2000 提高组] 单词接龙(疑似错题)参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lo1henz6
- 此快照首次捕获于
- 2023/10/22 21:05 2 年前
- 此快照最后确认于
- 2023/11/02 21:40 2 年前
测试点二
Input
CPP2
abababab
abababc
a
Output
CPP19
CPP
#include <bits/stdc++.h>
using namespace std;
const int N = 50;
int n,ans = 0,t;char c;string w,tmp,tmp1;
string word[N];int vis[N];
bool pd(string a,string b) {
if(a.size() != b.size() && (a.find(b) == 0 || b.find(a) == 0)) return false;
tmp = a,tmp1 = b;
if(a == b) {
return a[a.size() - 1] == a[0];
}else {
while(b.find(tmp)) {
tmp = tmp.substr(1);
}
// while(a.find(tmp1)) {
// tmp1 = tmp1.substr(1);
// }
return tmp.size();
}
}
string concatStr(string a,string b) {
tmp = a,tmp1 = b;
int cnt = 0,cnt1 = 0;
if(a == b) {
for(int i = a.size() - 1,j = 0;i >= 0 && j < a.size();i--,j++) {
if(a[i] == b[j]) cnt++;
else break;
}
if(cnt) return tmp.substr(0,a.size() - cnt) + b;
else return a + b;
}else {
while(b.find(tmp)) {
tmp = tmp.substr(1);
cnt++;
}
// while(a.find(tmp1)) {
// tmp1 = tmp1.substr(1);
// cnt1++;
// }
return a.substr(0,cnt) + b;
// return max(a.substr(0,cnt) + b,b.substr(0,cnt1) + a);
}
}
void dfs(int u,string s) {
if(u >= 1) {
t = s.size();
ans = max(ans,t);
// cout << s << endl;
}
for(int i = 1;i <= 2 * n;i++) {
if(!vis[i] && pd(s,word[i])) {
vis[i] = 1;
dfs(u + 1,concatStr(s,word[i]));
vis[i] = 0;
}
}
}
int main(){
cin >> n;
for(int i = 1;i <= n;i++) {
cin >> w;
word[i] = word[i + n] = w;
}
cin >> c;
for(int i = 1;i <= 2 * n;i++) {
if(word[i].find(c) == 0) {
memset(vis,0,sizeof(vis));
vis[i] = 1;
dfs(1,word[i]);
}
}
cout << ans << endl;
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...