Codeforces Round #438 C.Qualification Rounds(状态压缩再枚举状态)

原创 2017年10月06日 21:52:03

题目链接:Qualification Rounds
题意:给出n,k。n个题目,k个人,k个人中每个人做过那个题目的关系也给出来。现在问能不能在这n个题目中选出一定数量的题组成一个题集,使得k个人中的任何一个人在这个题集中做过的题不超过题数的一半。

思路:刚开始想到,如果有一题k个人都做过,那么这一题绝对不选,如果有一题k个人都没做过,直接可以输出“YES”,问题在于那些完成的人数>0且< k的题里面,接着就想到了如果选两题就能输出“YES”的话,那么这两题一定没有交集;选3题输出“YES”的话,那么3题中的两题必须没有交集,否则意味着有一个人做过3题中的两题,大于1/2了。选四题,选五题…要输出“YES”,至少都要求存在两个题做过的人没有交集。

所以,只需要判断存不存在两个题,使得两个题做过的人没有交集。由于题目数n高达1e5,n^2遍历铁定超时,而k最大只有4,所以这题关键在于状态压缩再枚举状态。存状态,状态最多只有16种,0000~1111,枚举状态,如果状态存在且作与运算结果为0,证明两个状态没有交集,输出“YES”。

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#define Max(a,b) a>b?a:b
#define Min(a,b) a>b?b:a
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
int dir[4][2]= {{1,0},{-1,0},{0,1},{0,-1}};
const double eps = 1e-6;
const double Pi = acos(-1.0);
const int INF=0x3f3f3f3f;
const int MOD = 1e9+7;
const int maxn = 1e5+10;
int mat[maxn][4],num[4];
int main(){
    int n,k;
    int state,x;
    int vis[20];
    while(~scanf("%d%d",&n,&k)){
        mem(vis,0);
        for(int i = 0; i < n; i++){
            state = 0;
            for(int j = 0; j < k; j++){
                scanf("%d",&x);
                state += (1 << j) * x;
            }
            vis[state] = 1;
        }
        bool flag = false;
        for(int i = 0; i < 16; i++){
            for(int j = 0; j < 16; j++){
                if(vis[i] && vis[j] && (i & j) == 0){
                    flag = true;
                }
            }
        }
        if(flag) puts("YES");
        else puts("NO");
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Codeforces Round #371 (Div. 2) C. Sonya and Queries 压位、二进制来状态压缩

压位、二进制来状态压缩 根据 ai的各个digit的奇偶可以把它状态压缩到一个 Ind 比如 Ind = 0; 然后最右边以为是 奇数 则 Ind += pow2[0]; 如果是 右边第二位是奇数则 ...

Codeforces Round#321 (div.2) A,B,C,D;(细节处理,尺取,dfs(树上的),状态压缩dp)

附上大神链接:http://www.cnblogs.com/alihenaixiao/p/4836471.html#3276283      自己写的A,C,借鉴的大神的B,D; 这个我的头文件习惯...

CF 474C Captain Marmot[暴力枚举 || bfs状态压缩 ]

题目链接:http://codeforces.com/problemset/problem/474/C 问题的意思还是比较简单的,

Codeforces Round 580 D. Kefa and Dishes (状态压缩dp)

D. Kefa and Dishes time limit per test 2 seconds memory limit per test 256 megabytes input sta...

Codeforces Round #316 (Div. 2) D. Tree Requests(DFS+状态压缩)

题意:给定一棵树,n个节点,每个节点处有一个字母,结点的深度定义为节点到根结点1的距离, 有m个询问(u,v),每次回答以结点u为根的子树的深度为v的那些节点处的字母能否组成一个回文串,特别的,空串也...

Codeforces Round #235 (Div. 2) D. Roman and Numbers 解题报告(状态压缩)

D. Roman and Numbers time limit per test 4 seconds memory limit per test 512 megabytes ...
  • kbdwo
  • kbdwo
  • 2014-03-11 15:39
  • 985

E. Vladik and cards Codeforces Round #384 (Div. 2) 好题 二分+(贪心+状态压缩DP)判断

题意:给一串取值为1-8的序列,找出满足下列要求的最长子序列(不要求连续): 1.每个值出现的次数相差不超过1; 2.子序列中相同的值得出现在一起。 设满足要求的子序列数字出现次数至少为len。...

Codeforces Round #235 (Div. 2) D. Roman and Numbers(状态压缩DP)

题目链接:点击打开链接 题意:给你一个数n,要求将n的各个位上的数重新排列(不能有前导0),使得形成的数对m取模为0, 问有多少个这种数。 思路:因为n太大了,枚举全排列复杂度高达n!。 因为n最大有...

Codeforces Gym - 101059C Gangsters [状态压缩]

Codeforces Gym - 101059C Gangsters [状态压缩]

Codeforces 8C Looking for Order(状态压缩DP)

Girl Lena likes it when everything is in order, and looks for order everywhere. Once she was getting...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)