CodeForces - 1557C - Moamen and XOR ( 位运算 + 排列组合 )

使用Python,OpenCV进行按位AND、OR、XOR和NOT 这篇博客将介绍如何使用OpenCV应用按位AND、OR、XOR和NOT。上一篇学习了如何从图像中裁剪和提取感兴趣的区域(ROI),截取的都是矩形。但是如果想裁剪一个非矩形区域呢?该怎么办?答案是同时应用位运算和掩蔽。 比较好记的是AND交集、OR并集、XOR并集-交集、NOT——非取反; 阅读详情
题目链接:点击进入
题目

在这里插入图片描述
在这里插入图片描述

题意

规定长度为 n 的数组要是满足 a 1 a_1 a1​& a 2 a_2 a2​&… a n a_n an​ >= a 1 ⊕ a 2 ⊕ a_1 \oplus a_2 \oplus a1​⊕a2​⊕… ⊕ a n \oplus a_n ⊕an​ 则认为是胜利。在每个数组元素小于 2 k 2^k 2k 的前提下,问有多少种数组 a 满足胜利的条件。

思路

看到这个 2 k 2^k 2k ,当时就想到多半按位来看。若是固定每一位,然后看 n 个数这一位的与运算 与 n 个数这一位的异或运算。异或运算有个规律,只要有奇数个 1 那么异或结果为 1 ,否则为 0 。根据这个规律我们大概可以想到,对着一位来说,我们可以选择取偶数个 1 的情况( 0 个 1 、2 个 1 … ( n & 1 ) ? n - 1 : n 个 1 ),这样就满足异或结果为 0 ,但是注意这个时候与运算的值,n 为偶数的情况下与结果可能为 0 也可能为 1 ( 我一开始还以为都是 0 呢,我个傻憨憨 ), n 为奇数的情况下与结果可能为 0 也可能为 1 。所以分类讨论一下。
n 是奇数,那么选取选取偶数个 1 的情况,异或结果是 0 ,与结果也是 0 ,两者相等,还有一种情况就是 n 个数都是 1 ,这时候异或结果是 1 ,与结果也是 1 ,两者依旧相等。因此,单看一位,相等的情况 ( 没有大于只有相等 ) 有 s u m = C n 0 + C n 2 + . . . + C n n − 1 + 1 sum=C_{n}^{0}+C_{n}^{2}+...+C_{n}^{n-1}+1 sum=Cn0​+Cn2​+...+Cnn−1​+1,因为有 k 位,因此方案数为 s u m k sum^k sumk
n 是偶数,那么选取选取偶数个 1 的情况,异或结果是 0 ,与结果不一定是 0 也可能是 1 ,因为选取偶数个 1 可能让 n 个数都是 1 的情况,那么这时候与结果为 1 ,否则其它情况与结果为 0 。也就是 1 选取 0 、 2 … n - 2 个的情况,异或结果是 0 ,与结果是 0 , 1 选取 n 个的情况,异或结果是 0 ,与结果是 1 。非全 1 的情况,结果是相等,全 1 的情况是与大于异或。我们可以想一下,若是存在一位与结果大于异或结果的情况,那么这一位大于了,我只要保证比这一位大的那些位是相等的,那么比这一位小的那些位,那不就是随便选了吗,这样最终结果一定是大于。一位上相等的情况共有 s u m = C n 0 + C n 2 + . . . + C n n − 2 sum=C_{n}^{0}+C_{n}^{2}+...+C_{n}^{n-2} sum=Cn0​+Cn2​+...+Cnn−2​,最终结果大于的情况共有 ∑ i = 1 k ( 2 n ∗ ( i − 1 ) ∗ s u m k − i ) ) \sum_{i=1}^{k}(2^{n*(i-1)}*sum^{k-i})) ∑i=1k​(2n∗(i−1)∗sumk−i)) ( s u m k − i sum^{k-i} sumk−i就是比第 i 位 ( 从低位数第 i 位 ) 大的那些位相等的情况, 2 n ∗ ( i − 1 ) 2^{n*(i-1)} 2n∗(i−1) 就是比第 i 位小的那些位随便选的情况,注意 ( 2 m ) n = 2 m n (2^m)^n=2^{mn} (2m)n=2mn 而不是等于 2 m + n 2^{m+n} 2m+n ,我真是个傻× )。最后在加上相等的情况 s u m k sum^k sumk 。

代码
// Problem: Rise of Shadows
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/11259/E
// Memory Limit: 524288 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

//#pragma GCC optimize(3)//O3
//#pragma GCC optimize(2)//O2
#include<iostream>
#include<string>
#include<map>
#include<set>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define best 131 
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define lowbit(x) x & -x
#define inf 0x3f3f3f3f
#define int long long
//#define double long double
//#define rep(i,x,y) for(register int i = x; i <= y;++i)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const double pai=acos(-1.0);
const int maxn=1e6+10;
const int mod=1e9+7;
const double eps=1e-9;
const int N=5e3+10;
/*--------------------------------------------*/
inline int read()
{
    int k = 0, f = 1 ;
    char c = getchar() ;
    while(!isdigit(c)){if(c == '-') f = -1 ;c = getchar() ;}
    while(isdigit(c)) k = (k << 1) + (k << 3) + c - 48 ,c = getchar() ;
    return k * f ;
}
/*--------------------------------------------*/
int t,n,m,a[maxn],k;
ll qpow(ll a,ll b)
{
    ll ans=1;
    while(b)
	{
        if(b&1) ans=ans*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return ans;
}
ll f[maxn],inv[maxn];
ll init()
{
    f[0]=1;
    for(int i=1;i<maxn;i++)
        f[i]=f[i-1]*i%mod;
    inv[maxn-1]=qpow(f[maxn-1],mod-2);
    for(int i=maxn-2;i>=0;i--)
        inv[i]=inv[i+1]*(i+1)%mod;
    return 0;
}
ll c(ll n,ll m)
{
    if (n<m) return 0;
    return f[n]*inv[m]%mod*inv[n-m]%mod;
}
signed main() 
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);cout.tie(0);
	init();
	cin>>t;
	while(t--)
	{
		cin>>n>>k;
		int tmp=1,len=(n&1)?(n-1):n,sum=0,ans=0;
		if(n&1)
		{
			for(int i=0;i<=len;i+=2)
				sum=(sum+c(n,i))%mod;
			sum=(sum+1)%mod;
			ans=qpow(sum,k)%mod;
		}
		else
		{
			for(int i=0;i<=len-2;i+=2)
				sum=(sum+c(n,i))%mod;
			ans=qpow(sum,k)%mod;
			int sum2=0;tmp;
			for(int i=1;i<=k;i++)
				sum2=(sum2+qpow(2,n*(i-1))%mod*qpow(sum,k-i)%mod)%mod;
			ans=(ans+sum2)%mod;
		}
		cout<<ans<<endl;
	}
    return 0;
} 
用AG9311芯片DIY一个多功能Type-C扩展坞:从原理图到PCB布局的保姆级指南 本文详细介绍了如何利用AG9311芯片DIY多功能Type-C扩展坞,涵盖从原理图设计到PCB布局的全过程。AG9311芯片作为高性价比的Type-C控制器,支持HDMI 2.0、USB 3.0、PD快充和千兆网口,适合硬件爱好者打造个性化扩展坞。文章还提供了调试技巧和进阶优化建议,帮助读者轻松完成项目。 阅读详情

相关推荐

关于Kswapd的理解(一)

关于Kswapd的理解(一) 之前跟踪了MemAvailable的计算方式,其中watermark的计算花了很多精力,在学习的过程中看到一些资料中说watermark是给swapd使用的,于是乎,研究一下看看咯 本部分主要记录两个方面: 对于kswapd这个东西,从初学者(我)的角度出发会考虑哪些内容? 跟踪kswapd 初始化结构部分; 1. KSwapd机制 上图是还没有跟踪kswapd code的时候,对自己提出的一些疑问和自身的理解,主要是如下内容: kswapd 机制用来做什么:内存不足时

And乔的博客 2714

Codeforces1557C Moamen and XOR(分类讨论,组合数学)

题目:Problem - C - Codeforces 给定一个a[i]长度n和k (a[i]<2^k)求满足a1&a2&a3&…&an≥a1⊕a2⊕a3⊕…⊕an的数组有多少种 主要是分类讨论,异或运算要想到按位讨论(n个数在特定一位上异或下来的结果上找规律) 异或要尽量往奇偶上想: #include<stdio.h> #include<math.h> #include<string.h> #include<algo

qq_56877339的博客 222

AI应用架构师总结:智能问答系统用户意图识别的8种方法与实践!

意图识别是智能问答系统的大脑入口,其技术水平决定了系统能否准确捕捉用户的核心诉求。本文系统剖析了从基础规则到前沿PLM的8种核心意图识别方法透明简单,冷启动快,维护成本高。中等规模场景基线,依赖特征工程。利用词义和局部/序列信息,训练成本高。当前最优精度,需大量资源。添加意图灵活,冷启动友好,精度可能略逊。提升鲁棒性,系统变复杂。解决歧义和自然交互的关键(多轮)。增强专业领域理解和推理能力。成功的意图识别模块需要:精准的意图定义(Schema)是前提!

AI云原生与云计算技术学院 1632

Codeforces1557C Moamen and XOR (组合数学 思维)

题目链接: Moamen and XOR 大致题意 给定n和k. 让你构造出一个长度为nnn​的序列a[], 每个元素小于2k2^k2k​​. 要求序列满足 a1a_1a1​ & a2a_2a2​ & a3a_3a3​ & … & ana_nan​ ≥ a1a_1a1​ ⊕ a2a_2a2​ ⊕ a3a_3a3​ ⊕ … ⊕ ana_nan​​ 问: 一共有个满足要求的序列. 解题思路 思维 下文提到的数字请看做二进制的形式!!! 为了简便叙述, 记andandand为原

Fau的博客 367

[pytorch] MedicalNet 3D Resnet预训练模型迁移学习实战:从分割到分类的代码改造

本文详细介绍了如何利用PyTorch对MedicalNet 3D ResNet预训练模型进行迁移学习,从分割任务改造为分类任务。通过解析模型结构、调整分类头、加载预训练权重及优化训练策略,帮助开发者在医疗影像领域快速实现高效模型部署。文章还涵盖了数据预处理、增强技巧及模型轻量化等实用内容。

kmeans3miner的博客 245

地平线天工开物AI开发平台实战:从量化训练到模型部署的完整指南

本文提供了地平线天工开物(OpenExplorer)AI开发平台的实战指南,详细解析了从量化训练到模型部署的完整流程。文章重点对比了量化感知训练(QAT)与训练后量化(PTQ)两条核心路径的优劣与适用场景,并分享了图像分类模型PTQ部署的实战经验与常见问题调试技巧,旨在帮助开发者高效地将AI模型部署到地平线AI芯片上。

weixin_29046035的博客 456

[Codeforces] 1557 C Moamen and XOR(组合数学)

Moamen and Ezzat are playing a game. They create an array a of n non-negative integers where every element is less than 2k. Moamen wins if a1&a2&a3&…&an≥a1⊕a2⊕a3⊕…⊕an. Here & denotes the bitwise AND operation, and ⊕ denotes the bitwise

PushyTao的博客 422

SOME/IP协议详解「1.0·概述」

主要讲解什么是someip,

雪云飞星的博客 5367

异或运算 ^(xor)小解

PS:这里用^表示异或运算,用 ^表示幂,为了放变整数的二进制序列只用4位 什么是异或运算: 设a=1,b=3; 那么a=0001,b=0011 a^b=0001^0011=0010,当两个数做异或运算的时候对应的位置,如果相同则为0,不同则为1,就是说1^1=0,0^0=0 但是 1^0=1; 异或运算的特性: 1: a^b=c;当c异或b时,结果还原成a 2:一个数异或自己时等于0; 3:一个数异或0的时候,结果是其本身 不使用第三个变量交换...

weixin_45423515的博客 4020

STM32驱动HC-SR04超声波模块

本篇文章将带大家使用HAL库驱动HC-SR04超声波模块。超声波模块作为智能小车必备的模块,要学习智能小车的同学是必须掌握好这个模块的使用的。HC-SR04是一种常用的超声波传感器模块,也被称为超声波测距模块,广泛应用于各种自动化控制和测距系统中。它通常由超声波发射器、接收器、控制电路和外壳组成,可以实现非接触式的距离测量。下面是HC-SR04超声波模块的一些特性和技术参数:距离测量范围:2cm ~ 400cm(可调)。测量精度:0.3cm。工作电压:DC 5V。工作电流:15mA。

m0_49476241的博客 7683

轮式并联五连杆下肢机器人运动控制:从建模到强化学习仿真训练

本文提出了一种基于强化学习的轮式并联五连杆下肢机器人运动控制方法。首先建立了机器人的运动学和动力学模型,推导了正逆解公式,并构建了URDF模型。随后在PyBullet仿真环境中搭建了包含复杂地形的训练场景,设计了基于PPO算法的端到端控制策略,包含状态空间、动作空间和奖励函数的详细设计。通过多组仿真实验验证了该方法在台阶攀爬等任务中的有效性,为轮腿机器人运动控制提供了完整的可复现技术方案。

huanghm88的专栏 347

codeforces 1557 C Moamen and XOR(递推、分类讨论)

codeforces 1557 C Moamen and XOR 题目链接 题目标签 递推、分类讨论 题目大意 有一个由nnn个大小不超过2k2^k2k的非负整数组成的数组aaa ,问有多少组aaa满足条件a1&a2&a3……&an≥a1⊕a2⊕a3……⊕an{a_1}\&{a_2}\&{a_3}……\&{a_n}\geq{a_1}⊕{a_2}⊕{a_3}……⊕{a_n}a1​&a2​&a3​……&an​≥a1​⊕a2​⊕a3​……

屋檐听雨丶 394

番外篇 | 复现HIC-YOLOv5,助力小目标物体的检测

在本文中提出了一种改进的YOLOv5算法:HIC-YOLOv5,用于小目标检测,具有更好的性能和较低的计算成本。🌈

小哥谈 1129

异或运算(XOR)

1、含义 异或运算(XOR)是 exclusive OR 的缩写。英语的 exclusive 意思是"专有的,独有的",可以理解为 XOR 是更单纯的 OR 运算。 OR 运算的运算子有两种情况,计算结果为true。 (1)一个为 true,另一个为 false; (2)两个都为 true。 上面两种情况,有时候需要明确区分,所以引入了 XOR。 XOR 主要用来判断两个值是否不同。 XOR 一般使用插入符号(caret)^表示。如果约定0 为 false,1 为 true,那么 XOR 的运算真值表如下。

qq_44006819的博客 4万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

xor 逻辑异或

定义 Exclusive OR(异-或运算) 异或(xor)是一个数学运算符。它应用于逻辑运算。异或符号为“^”。其运算法则为: a^b=(a' and b) or (a and b')(a'为非a)。 真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假。就是说两个值不相同,则异或结果为真。反之,为假。 不同为1,相同为0. 异或也叫半加运算,其运算法则相当

原创学无止尽 2万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

异或的学习总结--转载

翻阅了许多资料发现一篇博文总结的很好,特转载到本博客中方便查看以及保存。该博文转载自金马的博客 什么是异或? Wikipedia的解释: 在逻辑学中,逻辑算符异或(exclusive or)是对两个运算元的一种逻辑析取类型,符号为 XOR 或 EOR 或 ⊕(编程语言中常用^)。但与一般的逻辑或不同,异或算符的值为真仅当两个运算元中恰有一个的值为真,而另外一个的值为非真。转化为命题...

weixin_30757793的博客 2816

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

CodeForces - 1368

CodeForces - 1368 A - C+= 直接模拟 ll t,a,b,n; int main() { scanf("%lld",&t); while(t--) { int num=0; scanf("%lld%lld%lld",&a,&b,&n); while(a<=n&&b<=n) { ll minn=min(a,b);

想要一只银渐层 395

异或运算的巧用→不用额外的变量,如何交换两个变量的值?

开心一刻   两头奶牛在一起吃草,其中一头(奶牛甲)越吃越慢,一副若有所思的模样,另一头奶牛(奶牛乙)发觉了,开始了对话   奶牛乙:搁那合计啥呢?   奶牛甲:你帮我合计合计   奶牛乙:咋地了   奶牛甲:我吃的是草,挤出来的是奶,也就是说我把没用的变成有用的了   奶牛乙:是这个事   奶牛甲:人呢,喝的是奶,拉出来的是粑粑   奶牛乙:咋地了   奶牛甲:他又把有用的变成没用的了,我这不白干了吗   奶牛乙:你说的不对   奶牛甲:不对吗?   奶牛乙:那粑粑做成化肥,有..

SharingOfficer的博客 550

Xor HDU - 6899

Xor HDU - 6899 题意: 给你A,B,K,W,问现在有多少个(x,y)满足下列形式? x,y都是整数 x∈[0,A],y∈[0,B] |x-y|<=k x xor y<=W 题解: 数位dp 对于第1,2,4都是经典的数位dp转移 对于第三点怎么转移? 我们将绝对值拆开,得到x−y<=k,y−x<=kx-y<=k,y-x<=kx−y<=k,y−x<=k 整理下:k+y−x>=0,k−y+x>=0k+y-x>=0,k-y+x&g

qq_35975367的博客 224

codeforces 870d Something with XOR Queries

http://www.elijahqi.win/archives/1294 This is an interactive problem. Jury has hidden a permutation p of integers from 0 to n - 1. You know only the length n. Remind that in permutation all integer...

Elijahqi 382

如何理解「异或」的含义?

如何理解「异或」的含义?

qq_40649503的博客 4072

异或运算^

符号:^ 先要转化为2进制 如:3(011),4(100); 再将每一位都比较,相同为1,不同为0 3^4=7(111) 注意: 1.a ^ b ^ b=a(可以用来做找全为两个相同数中的一个孤立的数) 2.0^a=a

m0_52329101的博客 311
上一篇: 牛客2020年七夕节比赛 - F - 牛妹的考验( AC自动机 + dp )
下一篇: 2021牛客暑期多校训练营8 - E - Rise of Shadows( 思维 )
Cosmic_Tree
博客等级 码龄7年 134粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值