Codeforces round438 C. Qualification Rounds
来源:互联网 发布:fate extra 知乎 编辑:程序博客网 时间:2024/06/03 06:44
题目:
n个题目,k个队伍,每个队伍知晓其中某些题目,问能否选出一些题目,使得每个队伍知晓的题目不超过一半
(1 ≤ n ≤ 105, 1 ≤ k ≤ 4)
分析:
一、若选出了3个题目,每个队伍至多知晓其中1个,那么去掉知晓队伍数最多的那个题目,仍为可行解,所以选出的3个题目其实是选出两个题目的扩增
二、若选出了4个题目
1、k=1时,能选出4个题目说明至少有2个题目是这个队伍不知晓的,所以可以选出2个题目使条件仍成立
2、k=2时,能选出4个题目说明,在选出的4个题目中,每个队伍至少有两个题目是不知晓的,同时删除1队和2队分别知晓的1个题目(也有可能是1队2队同时知晓的某个题目),删除这两个题目后,仍然满足条件
3、k=3时,能选出4个题目说明,在选出的4个题目中,每个队伍至少有两个题目是不知晓的。若3队不知晓任何题目,与k=2等价。若3队至少知晓1个题目,首先删除3队知晓的一个题目,这个题目可能同时被1队或2队知晓,假设被1队知晓,我们只需再删除一个被二队知晓的题目即可,又回到2个题目的情况,仍满足
4、k=4时,能选出4个题目说明,在选出的4个题目中,每个队伍至少有两个题目是不知晓的。若4队不知晓任何题目…………同理可证仍可化简为2个题目的情况
三、若选出了5个题目,每个队伍至多知道其中2个,则删除其中知晓人数最多的一个题目,仍满足,也就是回到选出4个题目的情况,所以仍可化简为2个题目
以此类推,若选出n个题目符合题意,总可选出2个题目也符合题意。
所以我们用二进制表示每个题目是否被某个队伍知晓,对每个题目,寻找是否存在一个题目,按位与之后==0,若存在则输出YES
代码:
#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=100005;int n,k,s[Tmax];bool v[Tmax];int main(){ int i,j,tmp,sum; scanf("%d%d",&n,&k); for(i=1;i<=n;i++) { sum=0; for(j=0;j<k;j++) { scanf("%d",&tmp); sum+=tmp<<j; } s[i]=sum; v[sum]=true; } for(i=1;i<=n;i++) { for(j=0;j<=31;j++) if((s[i]&j)==0&&v[j]==true) { printf("YES"); return 0; } } printf("NO"); return 0;}
- Codeforces round438 C. Qualification Rounds
- Codeforces 868 C Qualification Rounds
- codeforces 868C Qualification Rounds
- codeforces 868C Qualification Rounds
- Codeforces 868C Qualification Rounds
- Codeforces 868C Qualification Rounds
- CodeForces 868C Qualification Rounds
- codeforces 868C Qualification Rounds
- Codeforces Round #438 C. Qualification Rounds
- Codeforces 868 C. Qualification Rounds (技巧)
- Codeforces 868C Qualification Rounds【思维】
- Codeforces Round #438 C. Qualification Rounds 二进制
- Codeforces 868C Qualification Rounds 结论
- codeforces round #438 C. Qualification Rounds
- Codeforces Round #438 C. Qualification Rounds 题解
- Codeforces Round #438 C. Qualification Rounds
- C. Qualification Rounds
- codeforces 868C.Qualification Rounds(bitmasks与状压dp)
- codeforce_868A_水_模拟
- C# 建立Socket连接 持续发送屏幕截图
- java的for循环
- 写给自己和广大acm/编程初学者的话(整理自知乎)
- 完整渲染过程——从URL到页面
- Codeforces round438 C. Qualification Rounds
- Codeforces 868B. Race Against Time 模拟
- Linux源码包和RPM包的的区别以及RPM包服务管理方式与源码包服务管理方式
- 【fzu 2205 据说题目很水】
- C++函数返回多个变量
- 好久没写过博客了。。。洛谷 P2850 [USACO06DEC] 虫洞Wormholes
- BZOJ 1584 [Usaco2009 Mar]Cleaning Up 打扫卫生 动态规划
- The Fewest Coins POJ
- FFmpeg网络传输协议