Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <stack>
- #include <cstring>
- using namespace std;
- int m ,k;
- int n;
- long long x;
- class node{
- public:
- node *a, *b;
- long long bitmask;
- node(){
- a = NULL;
- b = NULL;
- bitmask = 0;
- }
- };
- int ret;
- string curr;
- void rek(int at, int depth, node *tmp){
- tmp -> bitmask |= x;
- int popcount = __builtin_popcount(tmp -> bitmask);
- if(popcount == n && depth > ret){
- ret = depth;
- }
- if(at == (int)curr.size() || depth > 60){
- return;
- }
- if(curr[at] == 'a'){
- if(tmp -> a == NULL){
- tmp -> a = new node();
- }
- rek(at + 1, depth + 1, tmp -> a);
- }
- else{
- if(tmp -> b == NULL){
- tmp -> b = new node();
- }
- rek(at + 1, depth + 1, tmp -> b);
- }
- }
- int main(int argc, const char * argv[]) {
- ios_base::sync_with_stdio(false);
- cin >> n;
- string s[6];
- node *root = new node();
- for(int i =0; i < n; i ++){
- cin >> s[i];
- }
- for(int i =0; i < n; i ++){
- curr = s[i];
- x = (1 << i);
- for(int j =0; j < s[i].size(); j ++){
- rek(j, 0, root);
- }
- }
- cout << ret << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement