fork(4) download
  1. #include<iostream>
  2. #include<string>
  3. #include<vector>
  4. #include<cstring>
  5. using namespace std;
  6.  
  7. int N, K, answer;
  8. bool alphabet[26];
  9. vector<string> word;
  10.  
  11. int canReadWord() {
  12. bool isRead;
  13. int count = 0;
  14. // 알고 있는 알파벳으로 알 수 있는 단어 개수 확인하기
  15. for (int i = 0; i < word.size(); i++) {
  16. isRead = true;
  17. string str = word[i];
  18. for (int j = 0; j < str.length(); j++) {
  19. if (alphabet[str[j] - 'a'] == false) {
  20. isRead = false;
  21. break;
  22. }
  23. }
  24.  
  25. if (isRead == true) count++;
  26. }
  27. // 완전히 읽을 수 있는 단어 개수 반환
  28. return count;
  29. }
  30.  
  31. void DFS(int idx, int cnt) {
  32. if (cnt == K) {
  33. int tempAns = canReadWord();
  34. answer = answer < tempAns ? tempAns : answer;
  35. return;
  36. }
  37.  
  38. for (int i = idx; i < 26; i++) {
  39. // 이미 선택보장된 알파벳은 제외
  40. if (alphabet[i] == true) continue;
  41.  
  42. alphabet[i] = true;
  43. DFS(i, cnt + 1);
  44. alphabet[i] = false;
  45. }
  46. }
  47.  
  48.  
  49. int main() {
  50. cin >> N >> K;
  51. for (int i = 0; i < N; i++) {
  52. string str;
  53. cin >> str;
  54. word.push_back(str);
  55. }
  56.  
  57. if (K < 5) {
  58. cout << 0 << endl;
  59. return 0;
  60. }
  61.  
  62. // a, n, t, i, c 알파벳은 선택 보장
  63. alphabet['a' - 'a'] = true;
  64. alphabet['n' - 'a'] = true;
  65. alphabet['t' - 'a'] = true;
  66. alphabet['i' - 'a'] = true;
  67. alphabet['c' - 'a'] = true;
  68. K = K - 5;
  69.  
  70. DFS(0, 0); // 조합
  71. cout << answer << endl;
  72. }
  73.  
Success #stdin #stdout 0.27s 4988KB
stdin
50 15
antarctica
antahellotica
antacafsdrtica
antarngjocbtica
antarnfzojctica
antarnaffuctica
antarnaapoctica
antarnapgoctica
antardsfjoctica
antanapgoctica
antaafsdrctica
antarjhgctica
antarfjhctica
antarfbncttica
antarrtctica
antarbetrectica
antarqreufctica
antarrectica
antarqfjectica
antarafjtica
antarqvawectica
antarqofwyctica
antarvnfjctica
antarqovaeutica
antareufjectica
antarqefjtica
antarqefjectica
antaructica
antarqafdoctica
antarqictica
antarqerjictica
antarqoeictica
antarqeeictica
antarbroctica
antarbuyuoctica
antarbvuroctica
antarbiuyyctica
antarbdsfhctica
antarbquroctica
antarinfjctica
antarirjectica
antariqwctica
antariwyectica
antarigsdvctica
antarijectica
antarqegafdtica
antarqctica
antarqgoeictica
antarqtqtoetica
antarqnuyectica
stdout
30