zoukankan      html  css  js  c++  java
  • HDOJ 4414 (Finding crosses)

    思路 : 直接枚举

      1 /*
      2 PROG:   Finding crosses
      3 ID  :   
      4 LANG:   C++
      5 */
      6 //#pragma warnning (diaable : 4530)
      7 //#pragma warnning (disable : 4786)
      8 
      9 #include <set>
     10 #include <map>
     11 #include <list>
     12 #include <stack>
     13 #include <queue>
     14 #include <cmath>
     15 #include <string>
     16 #include <vector>
     17 #include <utility>
     18 #include <cmath>
     19 #include <cstdio>
     20 #include <cstdlib>
     21 #include <cstring>
     22 #include <iostream>
     23 #include <fstream>
     24 #include <algorithm>
     25 
     26 using namespace std;
     27 
     28 #define DEBUG 0
     29 
     30 const int MAXN = 52;
     31 const int dx[] = {-1, 0, 1, 0};
     32 const int dy[] = {0, 1, 0, -1};
     33 
     34 int N;
     35 char graph[MAXN][MAXN];
     36 
     37 void readGraph() {
     38     for (int ix = 0; ix < N; ++ix)
     39         scanf("%s", graph[ix]);
     40 }
     41 
     42 bool isNotOkey(int x, int y) {
     43     return (x < 0 || y < 0 || x >= N || y >= N || graph[x][y] != '#');
     44 }
     45 
     46 int countGrids(int x, int y, int dir) {
     47     int ax, ay, ret = 0;
     48     
     49     while (!isNotOkey(x, y)) {
     50         ax = x + dx[(dir + 1) % 4];
     51         ay = y + dy[(dir + 1) % 4];
     52         if (!isNotOkey(ax, ay)) return 0;
     53 
     54         ax = x + dx[(dir + 3) % 4];
     55         ay = y + dy[(dir + 3) % 4];
     56         if (!isNotOkey(ax, ay)) return 0;
     57         
     58         ++ret, x += dx[dir], y += dy[dir];
     59     }// End of while
     60     return ret;
     61 }
     62 
     63 void Solve() {
     64     int cross = 0, grids[4] = {0};
     65     
     66     for (int ix = 0; ix < N; ++ix) {
     67         for (int jx = 0; jx < N; ++jx) {
     68             if (graph[ix][jx] == '#') {
     69                 memset(grids, 0, sizeof(grids));  // record the grids
     70                 for (int kx = 0; kx < 4; ++kx) {
     71                     int nx = ix + dx[kx];
     72                     int ny = jx + dy[kx];
     73                     grids[kx] = countGrids(nx, ny, kx);
     74                 }
     75                 if (grids[0] && grids[0] == grids[1]
     76                     && grids[0] == grids[2] && grids[0] == grids[3]) {
     77                     ++cross;
     78                 }
     79             }// End of if
     80         }
     81     }// End of for
     82     printf("%d\n", cross);
     83 }
     84 
     85 int main() {
     86 #if DEBUG
     87     freopen("E:\\hdoj_4414.in", "r", stdin);
     88     freopen("E:\\hdoj_4414.out", "w", stdout);
     89 #endif
     90 
     91     while (~scanf("%d", &N), N != 0) {
     92         readGraph();
     93         Solve();
     94     }// End of while
     95     return 0;
     96 }
     97 /*
     98 7
     99 ooo#ooo
    100 ooo#ooo
    101 o######
    102 ooo#ooo
    103 ooo#ooo
    104 ooo#ooo
    105 ooooooo
    106 0
    107 
    108 Run ID    Submit Time    Judge Status    Pro.ID    Exe.Time    Exe.Memory    Code Len.    Language    Author
    109 6847615    2012-10-01 15:29:57    Accepted    4414    0MS    232K    1833 B    C++    Maxwell
    110 */
  • 相关阅读:
    OOm是否可以try catch ?
    Java中两个线程是否可以同时访问同一个对象的两个不同的synchronized方法?
    PHP请求ws出现的问题
    AndFix注意事项
    thinkphp 查表返回的数组,js解析有UNICode编码,解决办法
    thinkphp用ajax遇到的坑——ajax请求没有反应
    用php获取js变量的值
    android项目安装报错:INSTALL_FAILED_CONFLICTING_PROVIDER
    96
    wuti
  • 原文地址:https://www.cnblogs.com/yewei/p/2709753.html
Copyright © 2011-2022 走看看