题目直接复制会乱码
题意:
将头相同(头的长度为k-1,不包括最后一个字符)长度为k的字符串组合成长度为k+1的新字符串,新字符串尾巴长度为2,由找出的字符串尾巴按字典序序排列而成。
注意:最后输出的字符串序列也是有序的。
输入样例:
5 2
ac
bc
ad
be
ce
输出样例:
2
acd
bce
vector当容器
#include#include #include #include using namespace std; int main() { int n,k; while(scanf("%d %d",&n,&k)!=EOF) { //多组输入输出,这题没用到就是了 string str[n]; vector ans; for(int i=0; i >str[i]; } for(int i=0; i set当容器
#includeusing namespace std; int main() { int n,k; scanf("%d %d",&n,&k); string str[n]; set ans; for(int i=0; i >str[i]; } for(int i=0; i ::iterator it = ans.begin(); it != ans.end(); it++) { cout<<*it< 2、map嵌套vector记数据,set存答案,排序都省了 #includeusing namespace std; int main() { int n,k; cin>>n>>k; map > fre; set ans; for(int i=0; i >str; tmp = str.substr(0,k-1); if(fre.count(tmp)>0) { //tmp出现返回1,未出现返回0 vector t = fre.find(tmp)->second; //迭代器遍历map的第二个元素vector容器 for (vector ::iterator inner = t.begin(); inner != t.end(); ++inner) { if(*inner < str[k-1]) ans.insert(tmp+*inner+str[k-1]); else ans.insert(tmp+str[k-1]+*inner); } fre.find(tmp)->second.push_back(str[k-1]); } else { fre[tmp].push_back(str[k-1]); } } cout< ::iterator it = ans.begin(); it != ans.end(); it++) { cout<<*it< unordered_map提高性能(存数据不需要有序)
auto 遍历增加可读性,更简洁!#includeusing namespace std; int main() { int n,k; cin>>n>>k; unordered_map > fre; set ans; for(int i=0; i >str; tmp = str.substr(0,k-1); if(fre.count(tmp)>0) { for (auto inner:fre.find(tmp)->second) { if(inner < str[k-1]) ans.insert(tmp+inner+str[k-1]); else ans.insert(tmp+str[k-1]+inner); } fre.find(tmp)->second.push_back(str[k-1]); } else { fre[tmp].push_back(str[k-1]); } } cout< 部分测试数据 7 3 bbx bbc bba aaz aax bbe abc 7 aaxz bbac bbae bbax bbce bbcx bbex6 2 ce be ad bc ac ab 4 abc abd acd bce



