C. Moamen and XOR

题目链接

题目大意:每组样例给一个 nnn 和 kkk ,问有多少个长度为 nnn 的序列 aaa ,其所有 aia_iai​ 小于 2k2^k2k ,且 a1&a2&a3...&an≥a1⊕a2⊕a3...⊕ana_1\&a_2\&a_3...\&a_n≥a_1⊕a_2⊕a_3...⊕a_na1​&a2​&a3​...&an​≥a1​⊕a2​⊕a3​...⊕an​

首先考虑等于的情况,那么等于就是所有位都等于,那么我们考虑某一位相等的情况,对于这一位而言,我们要相等,又是两种情况,为 000 相等或为 111 相等。如果为 000 相等,那么首先就是异或值要为 000 ,则 nnn 个数字的这一位上的要有偶数个 111 ,则有 Cn0+Cn2+Cn4+...+Cn小于n的最大偶数=2n−1C_n^0+C_n^2+C_n^4+...+C_n^{小于n的最大偶数}=2^{n-1}Cn0​+Cn2​+Cn4​+...+Cn小于n的最大偶数​=2n−1 。那么我们发现这里可能有种情况需要减掉,就是 nnn 是偶数的话 CnnC_n^nCnn​ 的情况,不是等于,而是大于,所以这种情况算出来之后要减一。然后考虑为 111 相等的情况,那么只有全 111 才可能相与为 111 ,但是异或那边要为 111 之后奇数个 111 才行,所以这种情况只能 nnn 为奇数才能加一。我们可以最终算得某一位相等的情况为 ccc ,所有位都相等即为 ckc^kck

然后考虑大于,大于就是枚举在哪一位大于,大于只能是相与为 111 ,异或为 000 ,所以只有 nnn 为偶数才可能发生。然后枚举在第 iii 位发生了大于,这一位肯定只有一种情况,就是全 111 了。那么前 i−1i-1i−1 位就要全相等,也就是有 ci−1c^{i-1}ci−1 种情况,后面随便放什么都可以,那么后面一共有 (k−i)∗n(k - i) * n(k−i)∗n 个二进制位,每个都随便放什么,所以后面的情况就是 2(k−i)∗n2^{(k - i) * n}2(k−i)∗n ,所以在第 iii 位发生大于的情况数为: ci−1∗2(k−i)∗nc^{i-1}*2^{(k - i) * n}ci−1∗2(k−i)∗n ,所以大于的情况总数也就是: ∑i=1k(ci−1∗2(k−i)∗n)\sum\limits_{i=1}^k(c^{i-1}*2^{(k - i) * n})i=1∑k​(ci−1∗2(k−i)∗n)

将上述两种情况相加即可得答案。

#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 2e5 + 10;const ll mod = 1e9 + 7;ll n, k;ll ksm(ll base, ll n) {ll ans = 1;while(n) {if (n & 1ll) ans = ans * base % mod;base = base * base % mod;n >>= 1ll;}return ans;
}int main() {#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#endifint T;scanf("%d", &T);while(T--) {ll ans = 0;scanf("%lld%lld", &n, &k);ll c = ksm(2ll, n - 1);if (n % 2 == 0) {c = (c - 1 + mod) % mod;}if (n & 1) {c = (c + 1) % mod;}ans = (ans + ksm(c, k)) % mod;if (n % 2 == 0) {for (int i = 1; i <= k; ++i) { // 大于的情况ll tmp1 = ksm(c, i - 1);ll tmp2 = ksm(2ll, (k - i) * n);ans = (ans + tmp1 * tmp2 % mod) % mod;}}printf("%lld\n", ans);}
}

CF #737 C. Moamen and XOR相关推荐

  1. Codeforces Round #737 (Div. 2)---C. Moamen and XOR

    Codeforces Round #737 (Div. 2)-C. Moamen and XOR Moamen and Ezzat are playing a game. They create an ...

  2. cf1557 C. Moamen and XOR

    cf1557 C. Moamen and XOR 题意: 一个n位数,每一位小于2k2^k2k,如果a1&a2&-an>=a1⊕a2-⊕an,则获胜 现在给你n和k,问能构造多少 ...

  3. cf 737 div2

    题目 C题,推公式.dp. 题意: 给定长度为n的数组,每个数的取值为0 - 2^k中任取.求数量: 整个数组的& >= 整个数组的异或.(即 a1 & a2 - & a ...

  4. Moamen and XOR

    C. Moamen and XOR 莫阿门和伊扎特在玩游戏.他们创建了一个由n个非负整数组成的数组a其中每个元素都小于2k. 当a1&a2&a3&-&an≥a1⊕a2⊕ ...

  5. CF1557C Moamen and XOR

    C. Moamen and XOR Moamen and Ezzat are playing a game. They create an array a of n non-negative inte ...

  6. CF #737(div2)C. Moamen and XOR 与和异或-找规律

    题意 : 给 n 和 k (<2e5),保证每个数ai < 2^k,问使得

  7. CF #737(div2)B. Moamen and k-subarrays 贪心

    题意 : 给一个长为 n 的序列(distinct),将其分为 <= k 个连续的序列,对这些段任意组合,求能否得到递增序列. 思路 : 记录在原序列中每个distinct的位置,然后在结果序列 ...

  8. CF #737 (Div. 2) B. Moamen and k-subarrays

    题目: 点这里 碎碎念: 气死我了气死我了,这题预判过了结果重判wa了,本来没准备写题解的.最后一小时看C没做出来的我像个小丑 要求: 看看能不能将长度为n的数组分成k块排序后符合从小到大. 分析: ...

  9. 组合计数 ---- Codeforces 737C Div2 C. Moamen and XOR [多阶段决策计数dp]

    题目链接 题目大意: 有nnn个数.每次数范围是[0,2k]∣k∈[0,3e5][0,2^k]|k\in[0,3e5][0,2k]∣k∈[0,3e5] 问你有多少种情况这nnn个数的与大于等于异或 首 ...

最新文章

  1. 原根与指标,离散对数
  2. find -exec 与xargs 区别
  3. OpenCV各向异性图像分割anisotropic image segmentation的实例(附完整代码)
  4. centos7 tomcat_centos7中利用logrotate工具切割日志,以tomcat日志为例
  5. Apollo创建项目
  6. linux之安装mysql提示Error: Unable to find a match: mysql-community-server
  7. 【前端就业课 第一阶段】HTML5 零基础到实战(九)列表
  8. 【面试必备】java写spark好不好
  9. 红橙Darren视频笔记 view的invalidate调用draw方法的流程(源码分析基于api 29)
  10. Python学习相关资料
  11. 9年120亿,美的数字化转型纪实
  12. Java中的switch分支语句
  13. 项目实现思路(不断更新)
  14. 圆弧周长公式_弧长计算公式的公式
  15. win10主题更换_小白如何做到不更换硬件提升电脑性能做到不卡顿?
  16. php生成订单 调微信支付,PHP后台微信支付使用方法
  17. 小程序源码:2022虎年全新头像框制作
  18. 2.1 內积与欧几里得空间
  19. jsPlumb使用小技巧
  20. 零基础如何入门网络安全?2022年专业学习路线看这篇就够了

热门文章

  1. react-native进行ios系统app版本提示更新(无需后端接口)跳转到App Store
  2. qiankun微前端中主应用路由页面加载微应用的某个路由页面
  3. YOCTO 2019
  4. 写一个关于水基型灭火器的文案
  5. 【python】上传 Python 包到 pypi 官网
  6. 2018-2019中国计算机科学技术发展报告(CCF)PDF下载
  7. blat install
  8. dw怎么做html表格,DW里怎么做表格呢?用DW做表格的详细方法
  9. VT-x is disabled in BIOS的解决办法
  10. 汽车电子产品工程师须认识的相关标准