首页 > 其他分享 >P10118 『STA - R4』And 题解

P10118 『STA - R4』And 题解

时间:2024-02-03 09:14:35浏览次数:33  
标签:R4 ch P10118 二进制 题解 分配 Sn 集合 operatorname

题目

看到位运算,直接二进制拆分考虑。

首先 \(x \operatorname{AND}y=B\),设 \(x=B+m\),\(y=B+n\),知道 \(x+y=A\),所以设 \(W=n+m=A-2\times B\),\(y-x\) 等价于 \(n-m\)。

因为已知 \(x\operatorname{AND}y=B\),所以 \(n\operatorname{AND}m=0\),着意味着在二进制下 \(n\) 和 \(m\) 不存在某一位上都是 \(1\),我们将 \(W\) 进行二进制拆分为 \(n\) 和 \(m\)。

设 \(w=\sum\limits_{i=1}^{tot}2^{p_i}\),它在二进制下一共有 \(tot\) 个 \(1\),构成集合 \(U\),考虑如何将这些 \(1\) 分配给 \(n\) 和 \(m\)。

首先从左往右数的第一个 \(1\) 要分配给 \(n\) 保证 \(n>m\),然后我们设剩下的 \(1\) 分配给 \(n\) 的为集合 \(Sn\),则分配给 \(m\) 的 \(1\) 构成的集合为 \(\complement_{U}Sn\),那么此时也必有一种情况为分配给 \(n\) 的为集合 \(\complement_{U}Sn\),分配给 \(m\) 的为集合 \(Sn\),两种情况彼此抵消,最后会产生 \(2\times2^{p_1}\) 的贡献,也就是说一种情况只会产生一次 \(2^{p_1}\) 的贡献。

情况总数为 \(2^{popcount(W)-1}\),答案就是

\[ans=2^{p_1}\times2^{popcount(W)-1} \]

关于不合法的情况我们在前面已经提到过了,\(n\) 和 \(m\) 必须要满足\(n\operatorname{AND}m=0\),所以 \(W\operatorname{AND}B=0\),否则为不合法。

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
inline int read(){
    char ch=getchar();int x=0,f=1;
    for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
    for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<1)+(x<<3)+(ch^48);
    return x*f;
}
signed main(){
    // freopen("in.in","r",stdin),freopen("out.out","w",stdout);
    std::ios::sync_with_stdio(false);
    std::cin.tie(0),std::cout.tie(0);
    int T=read(),mod=read();
    while(T--){
        int a=read(),b=read();      
        int w=a-2*b;
        if(b&w||w<0){std::cout<<0<<'\n';continue;}
        int tot=__builtin_popcountll(w)-1;tot=(1ll<<tot)%mod;
        int zc=std::__lg(w);w=1ll<<zc;
        std::cout<<w%mod*tot%mod<<'\n';
    } 
}

吐槽一下出题人UU造的数据,你往每一个点里都塞特殊情况是吧,太毒瘤了。

标签:R4,ch,P10118,二进制,题解,分配,Sn,集合,operatorname
From: https://www.cnblogs.com/Ishar-zdl/p/18004325

相关文章

  • P4064 [JXOI2017] 加法 题解
    P4064[JXOI2017]加法题解思路一眼二分答案,这种区间的题很难不排序,可以考虑这个贪心check:区间左端点升序排序之后,每次遇到一个点,判断这个点是否合法,如果不合法就在所有左端点在这个点左边的区间里选择右端点最大的一个。感性证明:这个点之前的点已经保证合法了,所有左端点在......
  • AT_past202107_l 题解
    Solution题目来源:AT_past202107_l(inAtCoder|inluogu)用线段树维护区间最小值。单点修改很好写,我们看怎么区间寻找最小值位置。对于每次询问,我们先求出所查询区间\([x_i,y_i]\)的最小值\(p\),然后写一个寻找函数。对于当前区间\([l,r]\),分以下情况来看:如果当前区间长......
  • CF1542E2 题解
    一、题目描述:设$\pi(x)$为全排列$x$的逆序对数。给定$n,m$,求有多少对长度为$n$ 的排列$p,q$,使得$p$的字典序小于$q$,且$\pi(p)>\pi(q)$答案对$m$取模。数据范围:$1\len\le500,1\lem\le10^9$。 二、解题思路:一开始列出计算式个人感觉是......
  • 230718B3-path 题解
    感谢cn_ryh大佬的怂恿(否则我真不会动这个题感谢cszhpdx的指导帮助qwq(让我们膜拜一下场切的浩杨哥orz解决这个题让人很有成就感(题意给定一个基环树,边有长度l、限速v、价值w(每单位时间)已知起点s、终点t、最高速度u,求最小花费边数、询问次数$10^5$解法首先学习一下基......
  • P10118 『STA - R4』And
    P10118『STA-R4』And题意:给定A,B,求\(\sumy-x\),其中x,y满足:x<yx+y=Ax&y=B对于加运算和与运算,有x+y=2(x&y)+(x^y)。那么令C=x^y=A-2B。这里判断下无解情况,C<0,显然无解。C^B!=0,与位运算性质矛盾,无解。当然如果C<0,那......
  • 基于客户真实使用场景的云剪辑Timeline问题解答与代码实操
    本文为阿里云智能媒体服务IMS「云端智能剪辑」实践指南第6期,从客户真实实践场景出发,分享一些Timeline小技巧(AI_TTS、主轨道、素材对齐),助力客户降低开发时间与成本。欧叔|作者故事的开始要从一条客户的真实反馈说起。  Round1:视频比音频长,怎么办?某天,一位客户加入了智能媒......
  • 盘点那些硬件+项目学习套件:Hi3861鸿蒙开发板及入门常见问题解答
    华清远见20岁了~过去3年里,华清远见研发中心针对个人开发板业务,打造了多款硬件+项目学习套件,涉及STM32单片机、嵌入式、物联网、人工智能、鸿蒙、ESP32、阿里云IoT等多技术方向。今天我们来盘点一下,比较受欢迎几款“硬件+项目”学习套件,以及一些初学者比较关注的问题。盘点二:Hi3861......
  • fatal: couldn't find remote ref master 问题解决!
    这个错误信息通常出现在使用Git命令尝试从远程仓库克隆、拉取(pull)或推送(push)时,指定的分支(在这个案例中是master)在远程仓库中不存在。这种情况可能由以下几个原因导致:1.分支名称错误远程仓库中不存在名为master的分支:随着Git和GitHub的更新,master分支被重新命名为main......
  • AcWing 520. 子串 题解
    ps:觉得这编号很特殊就做了一下题目传送门算法(线性DP,前缀和)\(O(nmk)\)首先考虑如何DP,然后再考虑如何优化。状态表示:f[i,j,k]表示只用S的前i个字母,选取了k段,可以匹配T的前j个字母的方案数。状态计算:将f[i,j,k]表示的所有方案分成两大类:不用S[i],则方案数是f[i-1,......
  • P9309 [EGOI2021] Number of Zeros题解
    模拟赛时以为是进位制的题目,结果还做出来了。此题解解法与其它相似,但观察的角度不同(作者的脑回路不同)。此题问\(a\simb\)的最小公倍数中后导\(0\)的个数,即求其中\(2\)和\(5\)个数的最小值。分别计算即可,想到进位制,以\(a=10\),\(b=12\)时\(2\)的个数为例:1001(9)......