CodeFroces Round 438C. Qualification Rounds(思维题)

来源:互联网 发布:韧带 知乎 编辑:程序博客网 时间:2024/05/21 22:44

题意:给出n个题目,k个队伍是否刷过这题的情况表。现在要举办一场比赛,要求用的题目,不能有队伍已经刷过一半以上。问是否存在解。

解法:当时瞎写发现,好像只要选两个就可以了,然后就开始猜结论来写。由于k只有4,所以说最多只有1<<4种情况。直接转为二进制,暴力一下即可。

代码如下:

#include<iostream>#include<cstdio>#include<vector>#include<queue>#include<utility>#include<stack>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<set>#include<map>using namespace std;const int maxn = 1e5 + 5;int a[maxn], n, k;bool vst[maxn];int main() {#ifndef ONLINE_JUDGE//freopen("in.txt", "r", stdin);//    freopen("out.txt", "w", stdout);#endifscanf("%d%d", &n, &k);for(int i = 0; i < n; i++) {int t = 0;for(int j = 0; j < k; j++) {int tmp;scanf("%d", &tmp); if (!tmp) {continue;}            t |= (1 << j);}vst[t] = 1;}bool flag = 0;for(int i = 0; i < (1 << k); i++) {for(int j = i; j < (1 << k); j++) {if(!vst[i] || !vst[j])continue;if((i & j) == 0) {flag = 1;}}}if(flag)printf("YES\n");elseprintf("NO\n");return 0;}


原创粉丝点击