奶牛合作 对于位操作的敏感

2024-05-07 08:38
文章标签 合作 奶牛 敏感 位操作

本文主要是介绍奶牛合作 对于位操作的敏感,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

有n( <= 50)头奶牛,每头奶牛都有一个编号(<1048576),把他们分成警察和小偷两队(不能有一队为空),如果两队的合作指数相同,那么就是合法的方案(合作指数是指该队成员的编号进行and操作的结果)(限时2000ms)。

首先比较敏感的就是编号不算大,是2的20次方,还有就是and操作的结果只和0的个数有关系,如果某位有一个0,那么结果必然是0。所以对每一位进行考虑(指的是将数字转成二进制的某位):

假如有4有奶牛,编号依次为1、2、3、4:

位 3 2 1

1   0 0 1   //最左边的0称为第三位,中间的0为第二位,1是第一位

2   0 1 0

3   0 1 1

4   1 0 0

方式一: 奶牛1和奶牛2扮演警察,奶牛3和奶牛4扮演小偷。
方式二: 奶牛1和奶牛2扮演小偷,奶牛3和奶牛4扮演警察。

有四种情况:

1.若每头奶牛该位都是0,那么无论怎么分配,结果的这一位还是0。

2.若每头奶牛该位都是1,那么无论怎么分配,结果的这一位还是1。

3.如果有且只有一头奶牛该位是0,那么结果就是一队是0,一队是1。是无解的。

4.如果有两头以上的(包括两头)奶牛该位是0,只要不把他们都安放在同一个队伍就是合法的。

那么就可以用容斥原理算出不合法的方案数。从每一位进行考虑,将所有该位为0的奶牛都在同一个队伍的情况减去。


有点超时,我是用并查集来寻找0的连通块。

//#define watch
#include <cstdio>
using namespace std;
typedef long long LL;const int N = 50, M = 20;int n, father[M];
bool vis[M];
LL d[M];inline int getfather(int k) 
{if (father[k] == k) return k;return father[k] = getfather(father[k]);
}int main() 
{freopen("role.in", "r", stdin);freopen("role.out", "w", stdout);scanf("%d\n", &n);for (int i = 0; i < n; i ++) {int a;scanf("%d", &a);for (int j = 0; j < M; j ++) if ((a >> j & 1) == 0)d[j] |= 1LL << i;}int cant = 0;for (int i = 0; i < M; i ++) {int cnt = 0;for (int j = 0; j < n; j ++)if (d[i] >> j & 1) cnt ++;if (cnt == n || cnt == 0) cant |= 1 << i;else if (cnt == 1){printf("0\n");return 0;}}LL ans = (1LL << n) - 2LL;int setn = 1 << M;for (int set = 1; set < setn; set ++) {if (set & cant) continue;bool isplus = true;LL tot = 0LL;for (int i = 0; i < M; i ++)if (set >> i & 1) {vis[i] = false;father[i] = i;isplus = !isplus;tot |= d[i];for (int j = 0; j < i; j ++)if ((set >> j & 1) && (d[i] & d[j])) father[getfather(i)] = getfather(j);}int cnt = 0;for (int i = 0; i < M; i ++)if ((set >> i & 1) && (! vis[getfather(i)])) {vis[father[i]] = true;cnt ++;}for (int i = 0; i < n; i ++) if ((tot >> i & 1LL) == 0) cnt ++;LL t = (1LL << cnt) - 2LL;#ifdef watchprintf("set:%d isplus:%s val:%I64d\n", set, isplus?"true ":"false", t);#endifif (isplus) ans += t;else ans -= t;}printf("%I64d\n", ans);return 0;
}


这篇关于奶牛合作 对于位操作的敏感的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966860

相关文章

详解Java中的敏感信息处理

《详解Java中的敏感信息处理》平时开发中常常会遇到像用户的手机号、姓名、身份证等敏感信息需要处理,这篇文章主要为大家整理了一些常用的方法,希望对大家有所帮助... 目录前后端传输AES 对称加密RSA 非对称加密混合加密数据库加密MD5 + Salt/SHA + SaltAES 加密平时开发中遇到像用户的

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr

Ai+若依(智能售货机运营管理系统---帝可得)-人员管理-点位管理-区域管理-合作商管理----【08篇---0001:上】

项目介绍 售货机简介 帝可得是一个基于物联网概念下的智能售货机运营管理系统 物联网 物联网(IoT:Internet of Things)简单来说,就是让各种物品通过互联网连接起来,实现信息的交换和通信。 这个概念听起来可能有点抽象,但我们可以把它想象成一个超级大的社交网络。不过,这个网络里的成员不是人类,而是各种物品。比如,你的冰箱、洗衣机、甚至是你的汽车,它们都可以通过互联网互

mysql对敏感信息数据加解密——工作笔记

为保证用户信息安全,对所有涉及到用户敏感信息的字段(比如手机号)在数据库中都要进行密文存储。 既然需求来了那么自然而然要提出解决方案。经过讨论提出了两种加解密方案: AES加解密方案:AES_ENCRYPT() / AES_DECRYPT() DES加解密方案:DES_ENCRYPT() / DES_DECRYPT() 比如对PHONE字段进行加密,那就在数据库中新增两个字段:PHONE_AE

蓝象智联与中国电子云签署战略合作,共建隐私计算基础设施-数据冷链

为落实国家数字中国建设战略,夯实数字中国建设基础,打通数字基础设施大动脉,畅通数据资源大循环,蓝象智联与中国电子云于9月4日在北京签署战略合作协议,共建隐私计算基础设施方案。 签约仪式上,在中国电子云董事长兼总裁陈士刚与蓝象智联董事长童玲的见证下,中国电子云副总裁、数据产品线总经理冯进与蓝象智联CTO朱坤签署战略合作协议。 根据协议,双方将发挥各自优势资源,进行联合创新,在数据基础设施、数据

【SRC】某次众测绕过限制注册用户+敏感信息泄露漏洞

吉祥知识星球http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247485367&idx=1&sn=837891059c360ad60db7e9ac980a3321&chksm=c0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene

位操作(Bitwise Operation)

位操作(Bitwise Operation)是一种直接对整数的二进制位进行操作的计算方法。在计算机中,数据通常以二进制形式存储,位操作允许我们直接操作这些二进制位。位操作通常比常规的算术运算更高效,因为它们直接作用于二进制位而不涉及更复杂的计算。 常见的位操作符 1.按位与(&): 对应位都为1时,结果为1,否则为0。 例如:1010 & 1100 = 1000 2.按位或(|): 只要对应

关于位结构体及位操作总结

#include <stdio.h>#pragma pack(1)struct stu{char a:4; // a占用char的低4位 char b:4; // b占用char的高4位(注意,这里实际上是与a共享同一个char的空间) };#pragma pack(4)int main(){struct stu s={.a=2, //a:0010.b=3, //b:00

使用位操作高效解决单个元素出现问题【位运算】

使用位操作高效解决单个元素出现问题 在日常的算法面试和编程挑战中,常常会遇到寻找单个出现元素的问题。尽管可以用哈希表(map)轻松解决,但要求更高效的线性时间复杂度和常量空间复杂度时,位操作特别是异或(XOR)运算提供了一个巧妙的解决方案。本篇博客将深入探讨这个问题,详细解释异或运算的特性,并展示其在解决该类问题中的强大作用。 问题描述: 给定一个非空整数数组,除了某个元素只出现一次以外,其

公司电脑的敏感文件怎么审查?分为六步,步步为营,保护文件不泄密

敏感文件之所以敏感,是因为它包含里绝世机密。所以必须保护之,审查之,预防之。 敏感文件审查是一个重要且细致的过程,以下是一些关键的方法和步骤,包括使用软件来审查敏感文件。 一、明确敏感文件定义 首先,公司需要明确哪些文件被视为敏感文件。这通常包括客户信息、财务报表、产品研发资料、商业秘密等关键信息。 二、制定审查政策 根据敏感文件的定义,制定详细的审查政策,包括审查的范围、频率、责任