#include <stdio.h>
int n, m, index[256], B[21], word_bit[50];
char word[50][51];
int Big(int A, int B)
{
if (A > B)
{
return A;
}
else
{
return B;
}
}
int DFS(int number, int checked, int bit)
{
if (m == checked)
{
int r = 0;
for (int i = 0; i < n; i++)
{
if (((bit ^ word_bit[i]) | bit) == bit) r++;
}
return r;
}
else if (number < 21)
{
return Big(DFS(number + 1, checked + 1, bit | B[number]), DFS(number + 1, checked, bit));
}
else
{
return 0;
}
}
int main(void)
{
freopen("input.txt", "r", stdin);
int t = 0, tc = 0;
for (int c = 'b', count = 0; c <= 'z'; c++)
{
if (c == 'e' || c == 'i' || c == 'o' || c == 'u') continue;
index[c] = count++;
}
for (int i = 0, k = 1; i < 21; i++, k *= 2) B[i] = k;
scanf("%d", &t);
while (tc++ < t)
{
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++)
{
scanf("%s", word[i]);
word_bit[i] = 0;
for (int p = 0; word[i][p]; p++)
{
word_bit[i] |= B[index[word[i][p]]]; // word_bit 다 더해둠
}
}
printf("#%d %d\n", tc, DFS(0, 0, 0));
}
}
댓글