zoukankan      html  css  js  c++  java
  • bzoj 1059: [ZJOI2007]矩阵游戏 && vijos 1204 CoVH之柯南开锁

    bzoj 1059: [ZJOI2007]矩阵游戏
    Time Limit: 10 Sec  Memory Limit: 162 MB

    Description

      小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏。矩阵游戏在一个N
    *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作:行交换操作:选择
    矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵的任意行列,交换这两列(即交换
    对应格子的颜色)游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑
    色。对于某些关卡,小Q百思不得其解,以致他开始怀疑这些关卡是不是根本就是无解的!!于是小Q决定写一个程
    序来判断这些关卡是否有解。

    Input

      第一行包含一个整数T,表示数据的组数。接下来包含T组数据,每组数据第一行为一个整数N,表示方阵的大
    小;接下来N行为一个N*N的01矩阵(0表示白色,1表示黑色)。

    Output

      输出文件应包含T行。对于每一组数据,如果该关卡有解,输出一行Yes;否则输出一行No。

    Sample Input

    2
    2
    0 0
    0 1
    3
    0 0 1
    0 1 0
    1 0 0

    Sample Output

    No
    Yes
    【数据规模】
    对于100%的数据,N ≤ 200
    ---------
    解:将每个元素放入每列中;匈牙利跑一下;
    #include<cstdio>
    #include<cstring>
    const int N=210;
    int map[N][N];
    int book[N],ans[N];
    int n;
    bool find(int x)
    {
        for(int i=1;i<=n;i++)
        {
            if(map[x][i]&&(!book[i]))
            {
                book[i]=1;
                if(!ans[i]||find(ans[i]))
                {
                    ans[i]=x;
                    return true;
                }
            }
        }
        return false;
    }
    inline bool work()
    {
        for(int i=1;i<=n;i++)
        {
            memset(book,0,sizeof(book));
            if(!find(i)) return 0;
        }
        return 1;
    } 
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            memset(map,0,sizeof(map));
            memset(ans,0,sizeof(ans));
            int x;
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                {
                    scanf("%d",&x);
                    if(x) map[i][j]=1;    
                }
            if(work()) printf("Yes
    ");
            else printf("No
    ");    
        }
        
        return 0;
    }
    bzoj 1059
    ==========

          vijos 1204 CoVH之柯南开锁

    背景

    随着时代的演进,困难的刑案也不断增加...
    但真相只有一个
    虽然变小了,头脑还是一样好,这就是名侦探柯南!

    描述

    [CoVH06]
    面对OIBH组织的嚣张气焰, 柯南决定深入牛棚, 一探虚实.
    他经过深思熟虑, 决定从OIBH组织大门进入...........

    OIBH组织的大门有一个很神奇的锁.
    锁是由M*N个格子组成, 其中某些格子凸起(灰色的格子). 每一次操作可以把某一行或某一列的格子给按下去.
    图片
    如果柯南能在组织限定的次数内将所有格子都按下去, 那么他就能够进入总部. 但是OIBH组织不是吃素的, 他们的限定次数恰是最少次数.

    请您帮助柯南计算出开给定的锁所需的最少次数.

    格式

    输入格式

    第一行 两个不超过100的正整数N, M表示矩阵的长和宽
    以下N行 每行M个数 非0即1 1为凸起方格

    输出格式

    一个整数 所需最少次数

    样例1

    样例输入1

    4 4
    0000
    0101
    0000
    0100
    

    样例输出1

    2
    

    限制

    全部1秒

    ----------------

    解:二分图匹配,匈牙利;

    跟矩阵游戏很像;

    #include<cstdio>
    #include<cstring>
    #include<iostream>  
    const int N=210;
    int map[N][N];
    int book[N],ans[N];
    int n,m;
    bool find(int x)
    {
        for(int i=1;i<=m;i++)
        {
            if(map[x][i]&&(!book[i]))
            {
                book[i]=1;
                if(!ans[i]||find(ans[i]))
                {
                    ans[i]=x;
                    return true;
                }
            }
        }
        return false;
    }
    inline bool work()
    {
        for(int i=1;i<=n;i++)
        {
            memset(book,0,sizeof(book));
            if(!find(i)) return 0;
        }
        return 1;
    } 
    int main()
    {   
       memset(map,0,sizeof(map));
       memset(ans,0,sizeof(ans));
       char x;
       scanf("%d %d",&n,&m);
       for(int i=1;i<=n;i++)
           for(int j=1;j<=m;j++)
           {
               std::cin>>x;
               if(x=='1') map[i][j]=1;    
           }
        int ans=0 ;
          for(int i=1;i<=n;i++)
        {
            memset(book,0,sizeof(book));
            if(find(i))  ans++;
        }
        printf("%d",ans);
         
        
        
        return 0;
    }
    vijos 1204
  • 相关阅读:
    XML错误信息Referenced file contains errors (http://www.springframework.org/schema/beans/spring-beans-4.0.xsd). For more information, right click on the message in the Problems View ...
    Description Resource Path Location Type Cannot change version of project facet Dynamic Web Module to 2.3.
    maven创建web报错Cannot read lifecycle mapping metadata for artifact org.apache.maven.plugins:maven-compiler-plugin:maven-compiler-plugin:3.5.1:runtime Cause: error in opening zip file
    AJAX跨域
    JavaWeb学习总结(转载)
    JDBC学习笔记
    Java动态代理之JDK实现和CGlib实现
    (转)看懂UML类图
    spring boot配置使用fastjson
    python3下django连接mysql数据库
  • 原文地址:https://www.cnblogs.com/12fs/p/7635448.html
Copyright © 2011-2022 走看看