美文网首页
二进制集合题

二进制集合题

作者: 陌路晨曦 | 来源:发表于2017-07-14 10:48 被阅读0次

可以用vis[h][val] = k做;
用vis[h][val] = k;来压缩大于32的部分,保留h= n/32; n为集合编号
当然也可以直接用bitset做;

vis[h][val] = k 压缩的代码如下:

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
using namespace std;

//这道题的点就是用位运算做了一个状态压缩,因为int型的数字只有32,而题目中给出的n的范围为1000
//所以要进行压缩,把大于32的部分用一个整数表示,小于32的部分用每一位上是否等于一来判断h* +k是否曾经存在过 
int vis[50][10005];
int main()   
{
    int t;
    scanf("%d",&t);
    int n,tmp,h,k,maxx;
    for(int i=0;i<t;i++)
    {
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d",&tmp);
            int num = i;
            h = num/32,k = num%32;
            vis[h][tmp] = vis[h][tmp] | (1<<k);
        }
    }
    int Q;
    scanf("%d",&Q);
    for(int i=0;i<Q;i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        int flag = 0;
        
        for(int j=0;j<32;j++)
        {
            if(vis[j][a] & vis[j][b])
            {   
                flag = 1;
                break;
            }
        }
        if(flag) printf("Yes\n");
        else  printf("No\n");
    }
} 

bitset直接做的代码:
bitset 容器使用方法
http://blog.csdn.net/u010480899/article/details/52331363

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string.h>
#include <bitset>
using namespace std;

 bitset<1001>s[N];
int main()
{
    int n,q,i,j,m,a,b;
    scanf("%d",&n);
    for(i=0;i<N;i++)
        s[i].reset();
    for(i=0;i<n;i++)
    {
        scanf("%d",&m);
        for(j=1;j<=m;j++)
        {
            scanf("%d",&a);
            s[a].set(i);
        }
    }
    scanf("%d",&q);
    while(q--)
    {
        scanf("%d%d",&a,&b);
        bitset<1001>h=s[a]&s[b];
        if(h.count())
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}


相关文章

  • 二进制集合题

    可以用vis[h][val] = k做;用vis[h][val] = k;来压缩大于32的部分,保留h= n/32...

  • Android FrameWork 面试整合题集

    1.如何对 Android 应用进行性能分析 android 性能主要之响应速度 和UI刷新速度。 可以参考博客:...

  • 中考作文指导序列一:怎样切题

    审清题目,切合题意 中考评卷,依照扣题的程度将文章分为四等:切合题意,符合题意,基本符合题意,...

  • unicode,utf-8

    字符集:字符集规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系。计算...

  • 集合题

    1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:V...

  • MySql字符集

    字符集 计算机存储的是二进制数据,所以就需要建立一种规则表示二进制数据和字符之间的映射关系。这种规则就叫做字符集。...

  • binutils工具集

    binutils工具集 GNU binutils是一个二进制工具集。主要包括:ld:gnu链接器;as:gnu汇编...

  • 乱码问题——解决啊!

    一、中文数据的本质是字符集问题 计算机只识别二进制,所以需要有一个二进制与字符的对应关系(字符集) 1.查看所有字...

  • 220. 【kubernetes】二进制文件方式安装 Kuber

    这是 kubernetes 系列继 187. 【kubernetes】二进制文件方式安装 Kubernetes 集...

  • C的小工具库--JohnLib

    1. 有关大小端序,及二进制转换的工具集: 运行结果:

网友评论

      本文标题:二进制集合题

      本文链接:https://www.haomeiwen.com/subject/xvynhxtx.html