2927 集合

2927 集合

时间限制: 2 s

空间限制: 128000 KB

题目等级 : 钻石 Diamond

题解

查看运行结果

题目描述 Description

给出n个集合,每个集合中有若干个数。

有m个询问,每次询问两个数a,b,判断a、b是否同时存在于某一个集合中。

输入描述 Input Description

第一行为n。

接下来的n行,每行描述一个集合,每行的第一个数为该集合中数的个数k,接下来有k个数。数字可能有重复。

第n+2行为m。

接下来的m行,每行两个数a、b,表示一个询问。

输出描述 Output Description

对于每次询问,输出一行。若a、b同时存在于某一个集合中,输出Y,否则输出N。

样例输入 Sample Input

3

2 1 2

3 2 3 4

3 2 5 7

2

1 3

2 7

样例输出 Sample Output

N

Y

数据范围及提示 Data Size & Hint

n<=1000,k<=10000,m<=2000000,集合中的数字小于10000,a、b<=32767,不保证a!=b。不保证任意两个集合不同。集合中的数与询问的数均为非负整数。

分类标签 Tags 点此展开

#include<cstdio>
#include<iostream>
using namespace std;
unsigned long long a[20][10002];//大约分20组
int x,y,k,m,n;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&k);
        for(int j=1;j<=k;j++)
            scanf("%d",&x),a[i/64][x]|=(1ull<<(i%64));//long long 用ull
    }
    scanf("%d",&m);
    while(m--){
        scanf("%d%d",&x,&y);
        if(x>10000||y>10000){//数据太多,就2秒,只好~~
            printf("N\n");
            continue;
        }
        bool flag=0;
        for(int i=0;i<16;i++){//枚举组数
            if(a[i][x]&a[i][y]){//是否在同一组
                flag=1;break;
            }
        }
        printf("%s\n",flag?"Y":"N");
    }
    return 0;
}
时间: 2024-10-07 04:43:13

2927 集合的相关文章

模拟算法练习

codevs  1.1507 酒厂选址 1 #define N 10010 2 #include<iostream> 3 using namespace std; 4 #include<cstdio> 5 #include<cstring> 6 int sum[N],z[N],a[N]; 7 long long minn=-1; 8 int n; 9 int read() 10 { 11 int ans=0;char s; 12 s=getchar(); 13 whil

oracle 集合变量以及自定义异常的用法

oracle 集合变量以及自定义异常的用法, 在过程 record_practice 有record变量和自定义异常的用法实例.具体在3284行. 1 CREATE OR REPLACE Package Pkg_Weiyl Is 2 Pkg_Name Constant Varchar2(20) := 'pkg_weiyl'; 3 Too_Young Constant Number := -20001; 4 Exc_Too_Young Exception; 5 Pragma Exception_I

数组、字符串、集合

数组与集合的转换.数组与字符串的转换 ========数组变集合 String[] arr = {"abc","cc","kkkk"}; //把数组变成list集合有什么好处? /* 可以使用集合的思想和方法来操作数组中的元素. 注意:将数组变成集合,不可以使用集合的增删方法. 因为数组的长度是固定. contains. get indexOf() subList(); 如果你增删.那么会产生UnsupportedOperationExcepti

C#语言中数组和集合

数组.集合→用于储存多个同类型的数据数组 定长→用于保存固定数量的数据 在功能上,数组能实现的所有功能,集合都能实现:反之,集合能实现的某些功能,数组难以实现 占用内存少 便利速度快集合 不定长→保存的数据数量,可以在程序的执行过程中,发生变化 占用内存多 便利速度慢课时六:数组和集合 数组.集合→用于储存多个同类型的数据 数组 定长→用于保存固定数量的数据 在功能上,数组能实现的所有功能,集合都能实现:反之,集合能实现的某些功能,数组难以实现 占用内存少 便利速度快 集合 不定长→保存的数据数

通过反射了解集合泛型的本质

通过反射了解集合泛型的本质 import java.lang.reflect.Method; import java.util.ArrayList; /** * 通过反射了解集合泛型的本质 * @author shm * */ public class MethodDemo02 { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("hello"); list.add(

Java 之集合

collection(单列集合) List(有序,可重复) ArrayList     底层数据结构是数组,查询快,增删慢,线程不安全,效率高 Vector     底层数据结构是数组,查询快,增删慢,线程安全,效率低 LinkedList  底层数据结构是链表,查询慢,增删快,线程不安全,效率高 Set(无序,唯一) HashSet   底层数据结构是哈希表,依赖hashCode()和equals() 执行顺序:判断hashCode()是否相同,相同继续执行equals(),返回true不添加

集合和三元运算符

一.三元运算符 如下判断可以使用三元运算更方便的实现: a = 1b = 2 if a > 1: c = aelse: c = b 和下面是一样的: a = 1b = 2#下面这个c = a if a>1 else b 如下两种方法也是一样的:方式一: s=[]nums = list(range(1,11))for i in nums: if i%2==0: s.append(i)print(s)方式二:ss = [i for i in nums if i%2==0]print(ss)#这两种

集合函数 day4

1.集合 通过set强制转换,或者直接定义 1 nums = [0, 2, 4, 6, 8]#两种格式,带大括号与带中括号的 2 print(type(nums)) 3 aa = {0, 8, 2, 4, 6}#需要注意与字典的区别,字典是有分号的 2.交集

js算法集合(一) 水仙花数 及拓展(自幂数的判断)

js算法集合(一) ★ 最近有些朋友跟我说对js中的一些算法感到很迷惑,知道这个算法到底是怎么回事,但是就是不会用代码把它写出来,这里我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,希望能对大家有所帮助. 1.验证一个数是否为水仙花数 ①要写水仙花数的算法,我们首先来了解一下什么是水仙花数,水仙花数是指一个 3位正整数 ,它的每个位上的数字的 3次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153): ②了解了什么是水仙花数我们就开始分析该怎么下手.通过定义来看