必威体育Betway必威体育官网
当前位置:首页 > IT技术

因数个数

时间:2019-06-09 15:44:14来源:IT技术作者:seo实验室小编阅读:79次「手机版」
 

因数的定义

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=105;
bool vis[N][N];
char s[N][N];
int n,m;
const int dx[]={-1,1,0,0};
const int dy[]={0,0,-1,1};
inline bool inbond(int x,int y)
{
    return x>=0&&x<n&&y>=0&&y<m;
}
void dfs(int x,int y,char c,int &num)
{
    vis[x][y]=1,num++;
    for(int i=0;i<4;i++)
    {
        int xx=x+dx[i],yy=y+dy[i];
        if(inbond(xx,yy)&&!vis[xx][yy]&&s[xx][yy]==c)
            dfs(xx,yy,c,num);
    }
}
inline Find(int &x,int &y,char c)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(!vis[i][j]&&s[i][j]==c)
            {
                x=i,y=j;
                break;
            }
        }
    }
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++)
            scanf("%s",s[i]);
        int num0=0,num1=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(s[i][j]=='0')
                    num0++;
                else
                    num1++;
            }
        }
        if(num0==0)
        {
            puts("1");
            continue;
        }
        if(num1==0)
        {
            puts("-1");
            continue;
        }
        int x0=-1,y0=-1,x1=-1,y1=-1;
        Find(x1,y1,'1');
        if(x1==-1)
        {
            puts("-1");
            continue;
        }
        int tmp1=0;
        dfs(x1,y1,'1',tmp1);
        memset(vis,0,sizeof(vis));
        if(tmp1!=num1)
        {
            puts("-1");
            continue;
        }
        int tmp0=0;
        for(int i=0;i<m;i++)
        {
            if(s[0][i]=='0'&&!vis[0][i])
                dfs(0,i,'0',tmp0);
           if(s[n-1][i]=='0'&&!vis[n-1][i])
                dfs(n-1,i,'0',tmp0);
        }
        for(int i=0;i<n;i++)
        {
            if(s[i][0]=='0'&&!vis[i][0])
                dfs(i,0,'0',tmp0);
            if(s[i][m-1]=='0'&&!vis[i][m-1])
                dfs(i,m-1,'0',tmp0);
        }
        if(tmp0)
        {
            if(tmp0==num0)
            {
                puts("1");
                continue;
            }
            int temp=0;
            int x00=-1,y00=-1;
            Find(x00,y00,'0');
            dfs(x00,y00,'0',temp);
            if(temp+tmp0==num0)
                puts("0");
            else
                puts("-1");
        }
        else
        {
            int x00=-1,y00=-1;
            Find(x00,y00,'0');
            int tmp00=0;
            dfs(x00,y00,'0',tmp00);
            if(tmp00==num0)
                puts("0");
            else
                puts("-1");
        }
    }
    return 0;
}

相关阅读

excel表格统计个数的方法步骤图

我们在工作中使用excel时,经常会用到统计个数的操作,统计个数的方法有很多种,不妨和小编一起看看以下这种统计个数的方法,或许对你有

质因数的个数

题目描述求正整数N(N>1)的质因数的个数。相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。输入描述:可能有多组测试数

Office小知识(一)——word插入各种方向和条件个数的大括

Word中插入左右上下,多个单个花括号的总结 一:左右大括号(单个) 点击插入->公式,选择“括号”->“单方括号”,在插入的括号的虚线框中

计算烷烃的同分异构体个数

相当于计算度数不超过4的无标号无根树个数。按照无根树的套路,我们直接枚举子树即可。但是无根树可以用exp来搞,这个度数有限制。我

约数的个数,基础知识不牢导致的问题

题目描述输入n个整数,依次输出每个数的约数的个数。输入输入的第一行为N,即数组的个数(N<=1000)接下来的1行包括N个整数,其中每个数

分享到:

栏目导航

推荐阅读

热门阅读