zoukankan      html  css  js  c++  java
  • Codeforces Round #438 C. Qualification Rounds

    题意:这题题意也看了我好久orz,就是说给你n个题,k个队伍,以及这k个队伍知道这些题的情况,知道为1,不知道为0(这tm要竖着看)问你能

       不能在这n道题中选出一些题来,被选的题目应满足:每个队伍最多知道这些题的一半。

    Examples
    Input
    5 3
    1 0 1
    1 1 0
    1 0 0
    1 0 0
    1 0 0
    Output
    NO
    Input
    3 2
    1 0
    1 1
    0 1
    Output
    YES

    思路:什么最多知道一半啊啊啊啊啊!!我就选两个题目不就好了么,每个队知道一个或者两个都不知道就行了,这样想就一目了然了,然
        而还有一个问题,n比较大不能简单的用暴力,但是注意k比较小,最多只有4,所以我们可以采用二进制枚举的方法,每个队伍的状态
        都是一个二进制数,我们就用两层for循环枚举k位二进制数,判断他们是不是某两个队伍的状态(在这里不用担心会有两个队伍状态
        相同,因为如果状态相同那么他们肯定不满足条件)以及他们与(&)是不是等于0(就是判断在每个位置上是否出现了0),如果满足
        条件,那么便是找到了。

    代码:
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    const int maxn=20;

    int a[maxn];

    int main(){
        int n,k;
        scanf("%d%d",&n,&k);
        memset(a,0,sizeof(a));
        for(int i=0;i<n;i++){
            int x,sum=0;
            for(int j=0;j<k;j++){
                scanf("%d",&x);
                sum=sum*2+x;
            }
            if(sum==0){
                printf("YES ");
                return 0;
            }
            a[sum]=1;
        }
        bool f=0;
        int ma=0;
        for(int i=0;i<k;i++)ma=ma*2+1;
        for(int i=0;i<=ma;i++){
            for(int j=i+1;j<=ma;j++){
                if(a[i]==1&&a[j]==1&&((i&j)==0)){
                    f=1;
                    break;
                }
            }
            if(f==1)break;
        }
        if(f==1)printf("YES ");
        else printf("NO ");
        return 0;
    }

  • 相关阅读:
    项目经理所需要具备的素质
    项目经理的个人修养
    项目拖期怎么办
    创业起步的十大准备步骤
    注册(创办)公司的手续过程
    如何让女人每天更快乐
    全面比较:中美两国百姓的生活成本
    ADO.NET级别的事物
    respondsToSelector的使用
    用js在两个页面之间传值
  • 原文地址:https://www.cnblogs.com/ljy08163268/p/7634482.html
Copyright © 2011-2022 走看看