zoukankan      html  css  js  c++  java
  • hdu 5254 水题

    纯暴力就能过的,可是题目描述真心不清楚,我看了好久好久才明白题目啥意思。

    为了迅速打完,代码比较冗余。

    /*
     * Author    : ben
     */
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <set>
    #include <map>
    #include <stack>
    #include <string>
    #include <vector>
    #include <deque>
    #include <list>
    #include <functional>
    #include <numeric>
    #include <cctype>
    using namespace std;
    typedef long long LL;
    typedef long long LL;
    /*
     * 输入非负整数
     * 支持short、int、long、long long等类型(修改typec即可)。
     * 用法typec a = get_int();返回-1表示输入结束
     */
    typedef int typec;
    typec get_int() {
        typec res = 0, ch;
        while (!((ch = getchar()) >= '0' && ch <= '9')) {
            if (ch == EOF)
                return -1;
        }
        res = ch - '0';
        while ((ch = getchar()) >= '0' && ch <= '9')
            res = res * 10 + (ch - '0');
        return res;
    }
    //输入整数(包括负整数,故不能通过返回值判断是否输入到EOF,本函数当输入到EOF时,返回-1),用法int a = get_int2();
    int get_int2() {
        int res = 0, ch, flag = 0;
        while (!((ch = getchar()) >= '0' && ch <= '9')) {
            if (ch == '-')
                flag = 1;
            if (ch == EOF)
                return -1;
        }
        res = ch - '0';
        while ((ch = getchar()) >= '0' && ch <= '9')
            res = res * 10 + (ch - '0');
        if (flag == 1)
            res = -res;
        return res;
    }
    /**
     * 输入一个字符串到str中,与scanf("%s", str)类似,
     * 会忽略掉缓冲区中的空白字符。返回值为输入字符串
     * 的长度,返回-1表示输入结束。
     */
    int get_str(char *str) {
        char c;
        while ((c = getchar()) <= ' ') {
            if(c == EOF) {
                return -1;
            }
        }
        int I = 0;
        while (c > ' ') {
            str[I++] = c; c = getchar();
        }
        str[I] = 0;
        return I;
    }
    
    const int MAXN = 550;
    const int MAXM = 260000;
    char graph[MAXN][MAXN];
    int N, M, cnt;
    int X[MAXM], Y[MAXM];
    
    bool dfs(int x, int y) {
        bool flag = false;
        if (graph[x - 1][y - 1] == 1) {
            if (graph[x - 1][y] == 0) {
                graph[x - 1][y] = 1;
                X[cnt] = x - 1;
                Y[cnt] = y;
                cnt++;
                flag = true;
                dfs(x - 1, y);
            }
            if (graph[x][y - 1] == 0) {
                graph[x][y - 1] = 1;
                X[cnt] = x;
                Y[cnt] = y - 1;
                cnt++;
                flag = true;
                dfs(x, y - 1);
            }
        }
        if (graph[x - 1][y + 1] == 1) {
            if (graph[x - 1][y] == 0) {
                graph[x - 1][y] = 1;
                X[cnt] = x - 1;
                Y[cnt] = y;
                cnt++;
                flag = true;
                dfs(x - 1, y);
            }
            if (graph[x][y + 1] == 0) {
                graph[x][y + 1] = 1;
                X[cnt] = x;
                Y[cnt] = y + 1;
                cnt++;
                flag = true;
                dfs(x, y + 1);
            }
        }
        if (graph[x + 1][y - 1] == 1) {
            if (graph[x + 1][y] == 0) {
                graph[x + 1][y] = 1;
                X[cnt] = x + 1;
                Y[cnt] = y;
                cnt++;
                flag = true;
                dfs(x + 1, y);
            }
            if (graph[x][y - 1] == 0) {
                graph[x][y - 1] = 1;
                X[cnt] = x;
                Y[cnt] = y - 1;
                cnt++;
                flag = true;
                dfs(x, y - 1);
            }
        }
        if (graph[x + 1][y + 1] == 1) {
            if (graph[x + 1][y] == 0) {
                graph[x + 1][y] = 1;
                X[cnt] = x + 1;
                Y[cnt] = y;
                cnt++;
                flag = true;
                dfs(x + 1, y);
            }
            if (graph[x][y + 1] == 0) {
                graph[x][y + 1] = 1;
                X[cnt] = x;
                Y[cnt] = y + 1;
                cnt++;
                flag = true;
                dfs(x, y + 1);
            }
        }
        return flag;
    }
    
    void work() {
        bool change = true;
        while (change) {
            change = false;
            for (int i = 0; i < cnt; i++) {
                if (dfs(X[i], Y[i])) {
                    change = true;
                    break;
                }
            }
        }
    }
    
    int main() {
        int T = get_int();
        int x, y;
        for (int t = 1; t <= T; t++) {
            N = get_int();
            M = get_int();
            memset(graph, 0, sizeof(graph));
            for (int i = 0; i <= N + 1; i++) {
                graph[i][0] = -1;
                graph[i][M + 1] = -1;
            }
            for (int j = 1; j <= M; j++) {
                graph[0][j] = -1;
                graph[N + 1][j] = -1;
            }
            cnt = get_int();
            for (int i = 0; i < cnt; i++) {
                x = X[i] = get_int();
                y = Y[i] = get_int();
                graph[x][y] = 1;
            }
            work();
            int ans = 0;
            for (int i = 1; i <= N; i++) {
                for (int j = 1; j <= M; j++) {
                    if (graph[i][j] == 1) {
                        ans++;
                    }
                }
            }
            printf("Case #%d:
    %d
    ", t, ans);
        }
        return 0;
    }
  • 相关阅读:
    python爬虫之urllib
    python 数据库操作类
    Vue学习之路第十篇:简单计算器的实现
    Vue学习之路第九篇:双向数据绑定 v-model指令
    Vue学习之路第八篇:事件修饰符
    Vue学习之路第七篇:跑马灯项目实现
    Vue学习之路第六篇:v-on
    Vue学习之路第五篇:v-bind
    Vue学习之路第四篇:v-html指令
    Vue学习之路第三篇:插值表达式和v-text的区别
  • 原文地址:https://www.cnblogs.com/moonbay/p/4542504.html
Copyright © 2011-2022 走看看