思路:在图的外面包一圈'0'字符,然后dfs统计'0'字符的个数和'1'字符的个数。结果如下(num0表示0字符的个数,num1表示1字符的个数):

num0 == 1 && num1 == 1 : 结果为1

num0 == 2 && num1 == 1 : 结果为0

else 结果为-1

这个方法非常巧妙,可惜比赛时没想出来,直接在原图上dfs然后WA了一发后,发现有很多特殊的样例,如:

(1)

00100
00100
00100
00100

(2)

11111
10001
11111
10001
11111

直接dfs的话,不好判断1字符串块里面是否包含有且仅有一个0字符串块。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int n, m;
int amt0, amt1;
char mat[105][105];
bool vis[2][105][105];
const int dirs[][2] = {{ -1, 0}, {1, 0}, {0, -1}, {0, 1}};

void dfs(int x, int y, char c) {
    vis[c == '0' ? 0 : 1][x][y] = true;
    for(int i = 0; i < 4; ++i) {
        int nx = x + dirs[i][0], ny = y + dirs[i][1];
        if(nx >= 0 && nx <= n + 1 && ny >= 0 && ny <= m + 1 && !vis[c == '0' ? 0 : 1][nx][ny] && mat[nx][ny] == c)dfs(nx, ny, c);
    }
}

int main() {
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
#endif // ONLINE_JUDGE
    while(~scanf("%d%d", &n, &m)) {
        for(int i = 1; i <= n; ++i)scanf("%s", mat[i] + 1);
        for(int r = 0;r <= n + 1;r++)mat[r][0] = mat[r][m + 1] = '0';
        for(int c = 0;c <= m + 1;c++)mat[0][c] = mat[n + 1][c] = '0';
        memset(vis, 0, sizeof(vis));
        amt0 = 0, amt1 = 0;
        for(int i = 0; i <= n + 1; ++i) {
            for(int j = 0; j <= m + 1; ++j) {
                if(!vis[1][i][j] && mat[i][j] == '1') {
                    amt1++;
                    dfs(i, j, '1');
                }
                if(!vis[0][i][j] && mat[i][j] == '0') {
                    amt0++;
                    dfs(i, j, '0');
                }
            }
        }

        if(amt0 == 1 && amt1 == 1)printf("1\n");
        else if(amt0 == 2 && amt1 == 1)printf("0\n");
        else printf("-1\n");
    }
    return 0;
}

2017百度之星初赛A-1006(HDU-6113)的更多相关文章

  1. 2014百度之星初赛第二场hdu 4831 Scenic Popularity

    Scenic Popularity Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  2. HDU - 6112 2017百度之星初赛A 今夕何夕

    今夕何夕  Accepts: 1345  Submissions: 5533  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 32768/ ...

  3. HDU 6118 2017百度之星初赛B 度度熊的交易计划(费用流)

    度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  4. HDU 6119 2017百度之星初赛B 小小粉丝度度熊 (二分)

    小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  5. HDU - 6114 2017百度之星初赛B Chess

    Chess  Accepts: 1805  Submissions: 5738  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 32768 ...

  6. HDU - 6113 2017百度之星初赛A 度度熊的01世界

    度度熊的01世界  Accepts: 967  Submissions: 3064  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 327 ...

  7. 2017百度之星初赛B-1002(HDU-6115)

    一.思路 这题“看似”比较难搞的一点是,一个节点上有多个办公室,这怎么求?其他的,求树中任意两个节点的距离(注意:没有最远或最最进这一说法,因为树上任意两个节点之间有且仅有一条路径.不然就有回路了,对 ...

  8. 2017"百度之星"程序设计大赛 - 初赛(A) [ hdu 6108 小C的倍数问题 ] [ hdu 6109 数据分割 ] [ hdu 6110 路径交 ] [ hdu 6112 今夕何夕 ] [ hdu 6113 度度熊的01世界 ]

    这套题体验极差. PROBLEM 1001 - 小C的倍数问题 题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6108 (2017"百度之星 ...

  9. HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))

    度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

随机推荐

  1. Git 配置ssh key的步骤

    First start by setting up your own public/private key pair set. This can use either DSA or RSA, so b ...

  2. Cannot forward after response has been committed 错误

    出现该错误的原因是:页面的跳转控制不好,换句话就是说程序的逻辑控制不好,导致了程序顺序执行的时候多次跳转到同一页面,有的程序员建议用多次使用return语句来返回,但是个人认为最好的还是自己要先理清页 ...

  3. currentTarget,this,target区别

    currentTarget  : 事件处理程序当前正在处理事件的那个元素 this : 当前的事件发生的元素 target : 事件的目标 currentTarget和this值是始终相等的,但是ta ...

  4. C++里的单体类实现

    单件模式是设计模式中最简单的模式了. 定义: 确保一个类只有一个实例,并提供一个全局的访问点. 把一个类设计成自己管理的一个单独实例,同时避免其他类再自行生成实例(所以构造函数用protect或pri ...

  5. Android中免root的hook框架Legend原理解析

    一.前言 Android中hook框架已经非常多了,最优秀的当属Xposed和Substrate了,这两个框架我在之前的文章都详细介绍过了,不了解的同学,可以转战这里:http://www.wjdia ...

  6. 错误:XMLHttpRequest cannot load

    原因:Chrome浏览器不支持本地ajax访问,具体就是ajax不能访问file 有3种解决办法:http://frabbit2013.blog.51cto.com/1067958/1254285 其 ...

  7. 圣诞节为大家推荐一些学习java书籍

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序员经常会问到的问题 初级 ...

  8. CXF生成本地ws调用代码测试webservice

    package com.free.webservice.client; import java.util.List; import cn.com.webxml.*; public class Weat ...

  9. Windows2008操作系统 IIS7 IIS7.5 进程池经常死最终解决方案

    作为一个服务器维护人员,经常遇到不可解决的问题,这问题一直存在,一直困扰我多时,经常凌晨1-2点起床,就为了重启一下进程池 错误应用程序名称: w3wp.exe,版本: 7.5.7600.16385, ...

  10. HihoCoder 1055 : 刷油漆 树形DP第一题(对象 点)

    刷油漆 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了 ...