Advertisement
Guest User

Explode 'Em All 22.08.13

a guest
Aug 22nd, 2013
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <ctype.h>
  6. #include <bitset>
  7. #include <iostream>
  8. #include <stack>
  9. #include <queue>
  10. #include <set>
  11. #include <map>
  12. #include <string>
  13. #include <algorithm>
  14. using namespace std;
  15.  
  16. int n, m, m1, m2, h[60], rm[2][10000], ans = 9000;
  17. char c[30][30];
  18.  
  19. int ones(int n, int m) {
  20.     int r = 0;
  21.     for (int i = 0; n && (i < m); i++) {
  22.         r += n & 1;
  23.         n >>= 1;
  24.     }
  25.     return r;
  26. }
  27.  
  28. int v[2][100000];
  29.  
  30. int main() {
  31.     freopen("input.txt", "r", stdin);
  32.     freopen("output.txt", "w", stdout);
  33.        
  34.     scanf("%d%d\n", &n, &m);
  35.     for (int i = 0; i < n; i++) {
  36.         for (int j = 0; j < m; j++)
  37.             scanf("%c", &c[i][j]);
  38.         scanf("\n");
  39.     }
  40.  
  41.     m2 = m >> 1;
  42.     m1 = m - m2;
  43.     for (int i = 0; i < n; i++) {
  44.         for (int j = 0; j < m1; j++) {
  45.             h[i] <<= 1;
  46.             h[i] += (c[i][j] == '*');
  47.         }
  48.     }
  49.     for (int i = 0; i < n; i++) {
  50.         for (int j = 0; j < m2; j++) {
  51.             h[n + i] <<= 1;
  52.             h[n + i] += (c[i][m1 + j] == '*');
  53.         }
  54.     }
  55.  
  56.     int im1 = 1 << m1;
  57.     for (int i = 0; i < im1; i++) {
  58.         v[0][i] = ones(i, m1);
  59.         for (int j = 0; j < n; j++)
  60.             rm[0][i] = (rm[0][i] << 1) + ((h[j] & (~i)) > 0);
  61.     }
  62.  
  63.     int im2 = 1 << m2;
  64.     for (int i = 0; i < im2; i++) {
  65.         v[1][i] = ones(i, m2);
  66.         for (int j = 0; j < n; j++)
  67.             rm[1][i] = (rm[1][i] << 1) + ((h[n + j] & (~i)) > 0);
  68.     }
  69.  
  70.     for (int i = 0; i < im1; i++) {
  71.         int vert = v[0][i];
  72.         int hor = rm[0][i];
  73.         for (int j = 0; j < im2; j++) {
  74.             ans = min(ans, max(v[1][j] + vert, ones(hor | rm[1][j], 31)));
  75.         }
  76.     }
  77.  
  78.     printf("%d", ans);
  79.    
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement