Necklace Decomposition Necklace Decomposition
#include <bits/stdc++.h>
using namespace std;
bool necklace(string s) {
string x;
int n = s.size();
for(int i = 1; i < n; i++) {
x = s.substr(i, n-i) + s.substr(0, i);
if(x < s)
return false;
}
return true;
}
int main() {
freopen("data.in", "r", stdin);
int T, N;
string s, x;
scanf("%d", &T);
for(int i = 0; i < T; i++) {
cin >> s;
N = s.size();
for(int j = 0; j < N; ) {//从j开始切,贪心法
for(int k = N - j; k >= 0; k--) {//k为长度,从最长的开始试一试
x = s.substr(j, k);//j开始取k长度子串
if(necklace(x)) {
cout<<"("<<x<<")";
j = j + k;
break;
}
}
}
cout<<endl;
}
return 0;
}
本文介绍了一种名为项链分解的算法,该算法通过贪心法将字符串分解成一系列不可再分的子串,这些子串具有特殊的排列特性。文章提供了一个具体的实现示例,包括如何判断一个字符串是否满足特殊排列条件,并通过读取输入文件来处理多个测试用例。

571

被折叠的 条评论
为什么被折叠?



