문제
링크
풀이
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int l, c;
vector<char> a, b;
vector<bool> visited;
void backtrack(int idx) {
if (idx == l) {
int cnt = 0;
for (int i=0; i<l; i++) {
if (b[i] == 'a' || b[i] == 'e' || b[i] == 'i' || b[i] == 'o' || b[i] == 'u') cnt++;
}
if (cnt < 1 || l-cnt < 2) return;
for (int i=0; i<l; i++) {
cout << b[i];
}
cout << "\n";
return;
}
for (int i=0; i<c; i++) {
if (idx > 0 && a[i] < b[idx-1]) continue;
if (visited[i]) continue;
visited[i] = true;
b[idx] = a[i];
backtrack(idx+1);
visited[i] = false;
}
}
void solve(void) {
cin >> l >> c;
a.resize(c);
b.resize(l);
visited.resize(c, false);
for (int i=0; i<c; i++) {
cin >> a[i];
}
sort(a.begin(), a.end());
backtrack(0);
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
return 0;
}