Codeforces Round 843 (Div. 2) B. Gardener and the Array (构造)

原题地址


The gardener Kazimir Kazimirovich has an array of n n n integers c 1 , c 2 , … , c n c_1, c_2, \dots, c_n c1,c2,,cn.

He wants to check if there are two different subsequences a a a and b b b of the original array, for which f ( a ) = f ( b ) f(a) = f(b) f(a)=f(b), where f ( x ) f(x) f(x) is the bitwise OR of all of the numbers in the sequence x x x.

A sequence q q q is a subsequence of p p p if q q q can be obtained from p p p by deleting several (possibly none or all) elements.

Two subsequences are considered different if the sets of indexes of their elements in the original sequence are different, that is, the values of the elements are not considered when comparing the subsequences.

在这里插入图片描述
Input

Each test contains multiple test cases. The first line contains the number of test cases t t t ( 1 ≤ t ≤ 1 0 5 1 \le t \le 10^5 1t105). The description of the test cases follows.

The first line of each test case contains one integer n n n ( 1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1n105) — the size of the array c c c.

The description of the array c c c in this problem is given implicitly to speed up input.

The ( i + 1 ) (i + 1) (i+1)-st of the following n n n lines of the test case begins with an integer k i k_i ki ( 1 ≤ k i ≤ 1 0 5 1 \le k_i \le 10^5 1ki105) — the number of set bits in the number c i c_i ci. Next follow k i k_i ki distinct integers p i , 1 , p i , 2 , … , p i , k i p_{i, 1}, p_{i, 2}, \dots, p_{i, k_i} pi,1,pi,2,,pi,ki ( 1 ≤ p i ≤ 2 ⋅ 1 0 5 1 \le p_i \le 2 \cdot 10^5 1pi2105) —the numbers of bits that are set to one in number c i c_i ci. In other words, c i = 2 p i , 1 + 2 p i , 2 + … + 2 p i , k i c_i = 2^{p_{i, 1}} + 2^{p_{i, 2}} + \ldots + 2^{p_{i, k_i}} ci=2pi,1+2pi,2++2pi,ki.

It is guaranteed that the total sum of k i k_i ki in all tests does not exceed 1 0 5 10^5 105.

Output

For each set of input, print “Yes” if there exist two different subsequences for which f ( a ) = f ( b ) f(a) = f(b) f(a)=f(b), and “No” otherwise.

You can output the answer in any case (upper or lower). For example, the strings “yEs”, “yes”, “Yes”, and “YES” will be recognized as positive responses.


在这里我们想要去找是否有任何的子序列A或者B,使得 f ( A ) = f ( B ) f(A) = f(B) f(A)=f(B) 得到满足。
那么我们不妨先设A和B序列包含C数组的所有元素,那么这时候一定是满足 f ( A ) = f ( B ) f(A) = f(B) f(A)=f(B) 的(A和B的元素完全一致,或运算之后的结果也完全一致)。

但是题目给出的要求是 A ≠ B A \neq B A=B,所以这时候就去想:如果我们能够从C数组中抽离一个元素,然后将B序列变为抽离一个元素之后的C数组,那么这时候如果仍然满足 f ( A ) = f ( B ) f(A) = f(B) f(A)=f(B),那么就一定是满足题目的条件了。

那么在什么情况下能够做到去掉一个元素之后仍然能够得到相同的或运算结果呢 ?
当然是满足:删掉的元素所包含的二进制数位并不是当前删掉的元素特有的,也就是说删掉的这个元素的二进制形式上的每一个出现1的数位,其他的数也有,这样就不会影响或运算的结果了。

这时候就会有一个疑问,我们这种情况只是取得了一个长度为n的子序列和一个长度为n-1的子序列,仅仅判断这种情况是否能够涵盖所有的情况呢 ?

如果在其他情况下(即没有一种子序列取到了全部元素的情况下)存在 f ( A ) = f ( B ) f(A) = f(B) f(A)=f(B) 并且保证 A ≠ B A \neq B A=B,我们现在使得 A A A 序列更长,因为这时候二者的或运算的结果是完全相同的,如果我们让A和B序列同时再添加上A对于C的补集,或者说添加上 A A A 剩下的没有添加上的 C C C 中的元素,这样就能够使得 A A A 的长度变为 n n n这时候如果B的长度已经变为了 n − 1 n-1 n1,那么就完全转化为了第一种情况。

如果这时候 B B B 的长度不为 n − 1 n-1 n1,这时候就要想,这时候 A A A 的长度为 n n n,也就是说 A A A 包含了所有的 C C C 的元素,是 C C C 中所有元素的或运算的结果,而 f ( B ) f(B) f(B) 是等于 f ( A ) f(A) f(A) 的,那么就说明 B B B 就算再添加上剩下的没有添加上的 C C C 中的任何元素,也都可以保证结果是和 f ( A ) f(A) f(A) 相同,这样就可以让B任意的选取直到长度为 n − 1 n-1 n1,这样就又转化为了第一种情况。

综上所述,我们只需要保证 A A A 序列的长度为 n n n(包含 C C C 中所有元素), B B B 序列的长度为 n − 1 n-1 n1 的情况下存在 f ( A ) = f ( B ) f(A) = f(B) f(A)=f(B) 就可以了。
要使得这种情况得以成立,就只需要保证 C C C 中存在任何一个元素,这个元素的二进制形式出现1的位置,别的数也都出现过就可以了。

CODE:

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10;

void solve(){
    int n;cin >> n;
    unordered_map<int,int>vis;
    vector<vector<int>>bits(n); //直接开输入的n的大小的,开大了会TLE

    for(int i = 0;i < n;i++){
        int k;cin >> k;
        for(int j = 0;j < k;j++){
            int p;cin >> p;
            bits[i].push_back(p);
            vis[p]++;
        }
    }

    bool flag;
    for(int i = 0;i < n;i++){
        flag = 1;
        for(auto b : bits[i]){
            if(vis[b] == 1){
                flag = 0;
                break;
            }
        }

        if(flag){
            cout << "YES\n";
            return;
        }
    }
    cout << "NO\n";
}

int main(){
    int T;cin >> T;
    while(T--){
        solve();
    }
    return 0;
}

小声1313
去网上找了好多题解都没有办法看的很明白,大多都是因为证明不完全或者是跳了很多步,对于我这种菜狗而言真是难难又受受啊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/621488.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记:Adaptive Platform(AP)适配到RTOS

一、背景 1、AP版本 Adaptive Platform AUTOSAR R20-11版本标准支持C14。CM模块支持DDS、SOME/IP协议 2、RTOS RTOS-A核&#xff0c;当前完全支持POSIX PSE51、POSIX PSE52接口&#xff0c;POSIX PSE53部分支持&#xff0c;POSIX PSE54基本不支持。详细接口参考&#xff1a…

《三》菜单栏_工具栏_状态栏动作与实现

上期我们创建了辣么多的动作&#xff0c;那么这次我们要是开始实现这些动作&#xff0c;撸起袖子来吧&#xff1a; //菜单动作&#xff08;ACtion&#xff09;QAction *newAct;//新建QAction *openAct;//打开QAction *saveAct;//保存QAction *saveAsAct;//另存为QAction *prin…

学习java

在实验室看见这本书&#xff0c;无聊看了下&#xff0c;写出了第一个java代码 成功下载了eclipse并且汉化。 写了自己的第一个java程序&#xff1a; package ttttt;public class ttttt {public static void main(String[] args) {System.out.println("hello world")…

DS高阶:B树系列

一、常见的搜索结构 1、顺序查找 时间复杂度&#xff1a;O(N) 2、二分查找 时间复杂度&#xff1a;O(logN) 要求&#xff1a;&#xff08;1&#xff09;有序 &#xff08;2&#xff09;支持下标的随机访问 3、二叉搜索树&#xff08;BS树&#xff09; 时间复杂…

免费的国内版 GPT 推荐,5个国产ai工具

提起AI&#xff0c;大家第一个想到的就是GPT。 虽然它确实很厉害&#xff0c;但奈何于我们水土不服&#xff0c;使用门槛有些高。 不过随着GPT的爆火&#xff0c;现在AI智能工具已经遍布到各行各业了&#xff0c;随着时间的推移&#xff0c;国内的AI工具也已经“百花盛放”了…

哈希重要思想——位图详解

一&#xff0c;概念 所谓位图&#xff0c;就是用每一位来存放某种状态&#xff0c;适用于海量数据&#xff0c;数据无重复的场景。通常是用来判断某个数据存不存在的。 为了方便理解我们引入一道面试题&#xff0c; 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无…

UniAD大模型开路,智能车驶入AGI时代

作者 |老缅 编辑 |德新 在刚刚结束不久的北京车展上&#xff0c;除一众明星车型亮相&#xff0c;供应链企业也开始大秀肌肉&#xff0c;其中尤其以端到端大模型为代表&#xff0c;焕新一代的智驾技术栈掀起了新一轮热潮。 作为首个提出感知决策一体化自动驾驶通用模型的公司&…

C++学习笔记3

A. 求出那个数 题目描述 喵喵是一个爱睡懒觉的姑娘&#xff0c;所以每天早上喵喵的妈妈都花费很大的力气才能把喵喵叫起来去上学。 在放学的路上&#xff0c;喵喵看到有一家店在打折卖闹钟&#xff0c;她就准备买个闹钟回家叫自己早晨起床&#xff0c;以便不让妈妈这么的辛苦…

创新点!CNN与LSTM结合,实现更准预测、更快效率、更高性能!

推荐一个能发表高质量论文的好方向&#xff1a;LSTM结合CNN。 LSTM擅长捕捉序列数据中的长期依赖关系&#xff0c;而CNN则擅长提取图像数据的局部特征。通过结合两者的优势&#xff0c;我们可以让模型同时考虑到数据的时序信息和空间信息&#xff0c;减少参数降低过拟合风险&a…

STM32_HAL_RTC_解决恢复电源时再一次初始化

1问题 板子再次恢复电源时直接初始化了时间 2解决思路 在初始化函数&#xff08;MX_RTC_Init();&#xff09;中增加判断&#xff0c;判断是否是二次初始化 将值放入备份存储其中 3问题图 4解决后的源码 /* RTC init function */ void MX_RTC_Init(void) {/* USER CODE BE…

C++青少年简明教程:C++数据类型

C青少年简明教程&#xff1a;C数据类型 数据类型定义了变量可以存储哪些类型的数据&#xff0c;以及对这些数据可以进行哪些操作。C提供了丰富的数据类型供开发者使用。 下面是 C 中常见的数据类型&#xff1a; ★整型&#xff08;int&#xff09;&#xff1a;整数类型的数据…

零一万物发布千亿参数模型Yi-Large,李开复呼吁关注TC-PMF,拒绝Ofo式烧钱打法

5月13日&#xff0c;在零一万物成立一周年之际&#xff0c;零一万物 CEO 李开复博士携带千亿参数 Yi-Large 闭源模型正式亮相&#xff0c;正式进军全球 SOTA 顶级大模型之首&#xff0c;在斯坦福最新的 AlpacaEval 2.0 达到全球大模型 Win Rate 第一。除此之外&#xff0c;零一…

【代码随想录】【动态规划】背包问题 - 完全背包

完全背包 模板&#xff1a;完全背包问题 问题描述 完全背包问题与01背包问题唯一的区别在于&#xff1a; 在01背包中&#xff1a;每个物品只有一个&#xff0c;要么放入背包&#xff0c;要么不放入背包在完全背包中&#xff1a;每个物品有无限多个&#xff0c;可以不放入背…

迪安诊断数智中心战略与PMO负责人徐黎明受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 迪安诊断技术集团股份有限公司数智中心战略与PMO负责人徐黎明先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“软件研发项目管理指标体系建设实践”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; …

Rx(Reactive Extensions)的由来

既然我们已经介绍了响应式编程&#xff0c;现在是时候了解我们的明星了:响应式扩展&#xff0c;通常简称为Rx。微软开发了Reactive扩展库&#xff0c;使其易于处理事件流和数据流。在某种程度上&#xff0c;时变值本身就是一个事件流;每个值更改都是一种类型的事件它会更新依赖…

电流反馈型运放设计要点总结

目录 前言 基本架构 CFB和VFB运算放大器的差异 总结&#xff1a;电流反馈(CFB)与电压反馈(VFB) 前言 最近一个项目用到THS3491&#xff0c;发生了震荡&#xff0c;这是一个电流型反馈运放&#xff0c;借此机会&#xff0c;温故一下&#xff0c;电流运放的相关设计知识 基本架…

JAVA远程调试步骤

1.生成参数 2.复制到启动命令中 3.打jar包运行到远程服务器中 4.开始远程调试

【数据结构与算法 刷题系列】环形链表的约瑟夫问题

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;数据结构与算法刷题系列&#xff08;C语言&#xff09; 目录 一、问题描述 二、解题思路详解 解题思路 解题步骤 三、C语言代码…

NSSCTF | [LitCTF 2023]我Flag呢?

这道题没啥好说的&#xff0c;题目标签为源码泄露&#xff0c;我们直接CtrlU查看网页源码就能在最后找到flag 本题完

Linux---windows 机器和远端的 Linux 机器如何通过 XShell 传输文件

一、关于rzsz 这个工具用于 windows 机器和远端的 Linux 机器通过 Xshell 传输文件. 二、下载rzsz软件 用root输入命令&#xff1a; sudo yum install -y lrzsz下载完成&#xff1a; 三、如何传输 有图形化界面 1、从Windows机器传输给远端Linux机器 ① 直接拖拽 直接将…