#include <iostream>
#include <queue>
#include <vector>
using namespace std;
bool isBroWord(vector<int>& count,string& word, string& pat){
if(word.size() != pat.size() || word == pat) return false;
vector<int> cnt(26);
for(char c: pat){
cnt[c - 'a']++;
}
for(int i = 0; i < 26; i++){
if(cnt[i] != count[i]){
return false;
}
}
return true;
}
int main() {
int n, k;
cin >> n;
vector<string> dict(n);
for(int i = 0; i < n; i++){
cin >> dict[i];
}
string word;
cin >> word >> k;
priority_queue<string, vector<string>, less<string>> pq;
int cnt = 0;
vector<int> count(26);
for(char c: word){
count[c - 'a']++;
}
for(int i = 0; i < n; i++){
if(isBroWord(count,word,dict[i])){
cnt++;
pq.push(dict[i]);
if(pq.size() > k){
pq.pop();
}
}
}
cout << cnt << endl;
if(pq.size() == k){
cout << pq.top() << endl;
}
}
// 64 位输出请用 printf("%lld")
看了一圈题解,就没有人用优先队列吗



京公网安备 11010502036488号