Building Strings
c_cpp
2 months ago
1.7 kB
1
Indexable
Never
#include <bits/stdc++.h> #define F first #define S second #define PB push_back #define MP make_pair #define MOD (int) 1e9 + 7 #define all(x) begin(x), end(x) typedef long long ll; using namespace std; template <typename T> // cin >> vector<T> istream &operator>>(istream &istream, vector<T> &v) { for (auto &it : v) cin >> it; return istream; } template <typename T> // cout << vector<T> ostream &operator<<(ostream &ostream, const vector<T> &c) { for (auto &it : c) cout << it << " "; return ostream; } int k; vector<vector<char>> subsets; void rec(vector<char>& v, int i) { if(i == 11) return; if(v.size() == k) { subsets.push_back(v); } else { rec(v, i + 1); v.push_back('a' + i); rec(v, i + 1); v.pop_back(); } } bool check(vector<char> v, string s) { for(int i = 0; i < s.length(); i++) { bool flag = false; for(int j = 0; j < v.size(); j++) { if(s[i] == v[j]) { flag = true; break; } } if(!flag) return false; } return true; } void solve(void) { int n; cin >> n >> k; vector<char> v; rec(v, 0); vector<string> s(n); cin >> s; int ans = 0; for(auto x : subsets) { int tmp = 0; for(int i = 0; i < n; i++) { if(check(x, s[i])) { tmp++; } } ans = max(ans, tmp); } cout << ans << '\n'; } int main() { ios::sync_with_stdio(0); cin.tie(0); solve(); return 0; }