Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 KB | None | 0 0
  1. #include <vector>
  2. #include <string>
  3. #include <cstring>
  4. #include <queue>
  5. #include <iostream>
  6. #include <fstream>
  7. #include <algorithm>
  8. #include <cmath>
  9.  
  10. using namespace std;
  11.  
  12. int nextInt() {
  13.     int x;
  14.     scanf("%d", &x);
  15.     return x;
  16. }
  17.  
  18. char inp[10000];
  19. string nextString() {
  20.     scanf("%s", inp);
  21.     return inp;
  22. }
  23.  
  24. double nextDouble() {
  25.     double x;
  26.     scanf("%lf", &x);
  27.     return x;
  28. }
  29.  
  30. char a[30][30];
  31.  
  32. int p[1 << 25];
  33. char h[1 << 25];
  34. int hMask[25];
  35. char bits[1 << 25];
  36.  
  37. int main() {
  38.     int n = nextInt();
  39.     int m = nextInt();
  40.  
  41.     if (n == 0 || m == 0) {
  42.         printf("0\n");
  43.         return 0;
  44.     }
  45.  
  46.     for (int i = 0; i < n; ++i) {
  47.         scanf("%s", a[i]);
  48.     }
  49.  
  50.     for (int j = 0; j < m; ++j) {
  51.         h[1 << j] = j;
  52.         for (int i = 0; i < n; ++i) {
  53.             if (a[i][j] == '*') {
  54.                 hMask[j] |= 1 << i;
  55.             }
  56.         }
  57.     }
  58.     bits[0] = 0;
  59.     for (int i = 1; i < (1 << 25); ++i) {
  60.         bits[i] = bits[i & (i - 1)] + 1;
  61.     }
  62.  
  63.     p[(1 << m) - 1] = 0;
  64.     int res = m;
  65.     for (int mask = (1 << m) - 2; mask >= 0; --mask) {
  66.         int m2 = mask | (mask + 1);
  67.         p[mask] = p[m2] | hMask[h[m2 - mask]];
  68.         int t = bits[mask] > bits[p[mask]] ? bits[mask] : bits[p[mask]];
  69.         if (res > t) {
  70.             res = t;
  71.         }
  72.     }
  73.     printf("%d\n", res);
  74.        
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement