saturnbored

Accepted Code

Oct 12th, 2022
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. class Solution {
  2.    
  3.     void dfs(vector<int> &pos, int val, int v){
  4.         if(pos[v] <= val)
  5.             return;
  6.         pos[v] = val;
  7.         for(int i = 0; i < 21; ++i){
  8.             if(((v >> i) & 1) == 0)
  9.                 continue;
  10.             int child = v ^ (1 << i);
  11.             if(pos[child] <= val)
  12.                 continue;
  13.             dfs(pos, val, child);
  14.         }
  15.     }
  16.    
  17.   public:
  18.     vector<int> solve(int n, vector<string> &s, int Q, vector<string> &q){
  19.         vector<int> ans;
  20.         for(int i = 0; i < n; ++i){
  21.             sort(s[i].begin(), s[i].end());
  22.             auto it = unique(s[i].begin(), s[i].end());
  23.             s[i].resize(it - s[i].begin());
  24.         }
  25.         for(int i = 0; i < Q; ++i){
  26.             sort(q[i].begin(), q[i].end());
  27.         }
  28.         int N = (1 << 22) - 1;
  29.         vector<bool> vis(N + 1, 0);
  30.         vector<int> pos(N + 1, n + 1);
  31.         for(int i = 0; i < n; ++i){
  32.             int num = 0;
  33.             for(int j = 0; j < s[i].size(); ++j){
  34.                 num += (1 << (s[i][j] - 'a'));
  35.             }
  36.             dfs(pos, i, num);
  37.         }
  38.         for(int i = 0; i < Q; ++i){
  39.             int num = 0;
  40.             for(int j = 0; j < q[i].size(); ++j){
  41.                 num += (1 << (q[i][j] - 'a'));
  42.             }
  43.             if(pos[num] == n + 1)
  44.                 ans.push_back(-1);
  45.             else
  46.                 ans.push_back(pos[num]);
  47.         }
  48.         return ans;
  49.     }
  50. };
Advertisement
Add Comment
Please, Sign In to add comment