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;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 超声刀后喝酒了怎么办 开眼角疤痕增生了怎么办 开了眼角有增生怎么办 全切双眼皮留疤怎么办 开内眼角留疤了怎么办 开眼角长了颗粒怎么办 开刀后疤痕庝痛怎么办 眼角开得太尖了怎么办 眼角开得太大了怎么办 开眼角后增生了怎么办 下颌骨宽怎么办不整容 脸两边骨头太宽怎么办 接了睫毛眼睛疼怎么办 下颌骨错位脸歪怎么办 假体隆鼻感冒了怎么办 打了玻尿酸怀孕怎么办 鼻子上有出血点怎么办 内眼角开小了怎么办 上眼皮肿怎么办小妙招 嫁接的睫毛乱了怎么办 睫毛掉进眼睛里怎么办 痘痘留下的疤痕怎么办 宫颈癌前病变1级怎么办 纹身后结痂很厚怎么办 纹身结痂蹭掉了怎么办 药流20天同房了怎么办 药流23天同房了怎么办 小产后不来月经怎么办 人流12天同房了怎么办 人流20天同房了怎么办 人流后5天同房了怎么办 人流后3天同房了怎么办 人流20后同房了怎么办 上环后月经量多怎么办 上环后喝啤酒了怎么办 取环当天同房了怎么办 生完孩子有外痔怎么办 怀孕了宫腔积液怎么办 做完爱4天怕怀孕怎么办 半永久眉失败了怎么办 取环前2天同房了怎么办