๋ฌธ์์ด์ ํ๋ํ๋ ๋ค ๋ง๋ค์ด์ ๋น๊ตํ ํ์๋ ์๋ค. ์ด๋ค ๊ธ์๋ฅผ ๋ฐฐ์ ๋์ง ๋นํธ๋ก ํํํ๋ค.
i ๋ฒ์งธ ๊ธ์๋ฅผ ๋ฐฐ์ด๋ค๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ํํํ ์ ์๋ค.
int cur = cur | (1<<i);
์ง๊ธ๊น์ง ๋ฐฐ์ด ๊ธ์๋ค cur๋ก ๋จ์ด x๋ฅผ ์ฝ์ ์ ์๋์ง ์ด๋ป๊ฒ ์ ์ ์์๊น?
if (((cur^x)&x) == 0) can++;
xor ์ฐ์ฐ์ ํตํด ์ง๊ธ๊น์ง ๋ฐฐ์ด ๊ธ์์ ๋จ์ด์ ํฌํจ๋ ๊ธ์ ์ค ์ผ์นํ์ง ์๋ ๊ธ์๋ฅผ ์ฐพ๊ณ , ์ด ๊ธ์๊ฐ x์ ํ๋๋ผ๋ ์กด์ฌํ๋ฉด ๋จ์ด๋ฅผ ์ฝ์ ์ ์๋ค.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int n, k;
int ans = 0;
vector<int> v;
void solve(int cur, int cnt, int idx) {
if (cnt == k) {
int can = 0;
for (auto x : v) {
if (((cur^x)&x) == 0) can++;
}
ans = max(ans, can);
return;
}
for (int i = idx+1; i < 26; i++) {
if (cur&(1<<i)) continue;
solve(cur|(1<<i), cnt+1, i);
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k;
for (int i = 0; i < n; i++) {
string s;
cin >> s;
int x = 0;
for (auto c : s) {
x = x|(1<<(c-'a'));
}
v.push_back(x);
}
if (k < 5) {
cout << 0 << '\n';
return 0;
}
int start = 0;
string s = "antic";
for (auto c : s) {
start = start|(1<<(c-'a'));
}
solve(start, 5, 0);
cout << ans << '\n';
return 0;
}
๋ชจ๋ ๋จ์ด์ 'a', 'n', 't', 'i', 'c' ๊ฐ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ ๊ณ ๋ คํด์ฃผ์๋ค.