链接 :C. Brave Seekers of Unicorns

题意:
给你一个数 n (1 ≤ \leq ≤ n ≤ \leq ≤ 1e6),要求出有多少个严格单调递增的序列满足任意三个相邻的数满足 a[ i - 1] ⨁ \bigoplus ⨁ a[ i ] ⨁ \bigoplus ⨁a[ i + 1] ≠ \neq ​= 0 .
思路:
考虑dp , dp[ i ]表示有多少个以 i 为结尾的合法序列,那么不难得到转移方程 dp[ i ] = ∑ j = 1 i − 1 \sum_{j=1}^{i - 1} ∑j=1i−1​ dp[ j ] - dp[i ⨁ \bigoplus ⨁j] (i ⨁ \bigoplus ⨁ j < j).
对于前半部分我们可以直接用前缀和求出 , 后半部分其实就是求对于每一个 i, 求出有多少个 i ⨁ \bigoplus ⨁ j < j ,这里推一推就能得到一个结论 对于 i 的二进制位 ,如果第 x 位为 1,那么 2 x 2^{x} 2x 到 2 x + 1 − 1 2^{x+1}−1 2x+1−1 之间的数都是满足的(最高位除外)

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ioss ios::sync_with_stdio(false);cout.tie(NULL)
const int maxn=4e6 + 7;
const int mod = 998244353;
int n;
ll dp[maxn],pre[maxn];
int main(){scanf("%d",&n);for(int i = 1; i <= n; i ++){dp[i] = (pre[i - 1] + 1) % mod;int pos = -1;for(int j = 0; j < 30; j ++){if((i >> j) & 1) pos = j;}for(int j = pos - 1; j >= 0; j --){if((i >> j) & 1){dp[i] = (dp[i] - (pre[(1 << (j + 1)) - 1] - pre[(1 << j) - 1]) + mod) % mod;}}pre[i] = (pre[i - 1] + dp[i]) % mod;}printf ("%lld\n",pre[n]);
}

Codeforces Gym 102956 C. Brave Seekers of Unicorns(位运算 + dp)相关推荐

  1. [CodeForces gym 102956 D] Bank Security Unification(位运算优化dp)

    problem cf链接 solution 读完题先直接暴力 dpdpdp 拿出来,dpi=max⁡j<i{dpj+(fi&fj)}dp_i=\max_{j<i}\big\{dp_ ...

  2. Gym - 102956C. Brave Seekers of Unicorns

    题目链接 思路 d p [ i ] : dp[i]: dp[i]:表示以 i i i为结尾的所有方案数. 假设前一位数是 j j j,再前一位数是 k k k,连续的三个数满足条件 k < j ...

  3. CodeForces - 1451E2 Bitwise Queries (Hard Version)(交互+构造+位运算)

    题目链接:点击查看 题目大意:给出一个长度为 n(n 保证了是 2 的幂次),每个数的范围在 [ 0 , n - 1 ] 的一个数组,现在要求通过有限次操作确定下来这个数组: 询问 a[ i ] xo ...

  4. Codeforces Gym 101173 CERC 16 D BZOJ 4790 Dancing Disks

    Codeforces Gym 101173 CERC 16 D & BZOJ 4790 Dancing Disks 强烈安利这道构造题目,非常有意思. 这里用到的思想是归并排序! 多路归并排序 ...

  5. Codeforces Gym 101086 M ACPC Headquarters : AASTMT (Stairway to Heaven)

    Codeforces Gym 101086 M ACPC Headquarters : AASTMT (Stairway to Heaven) 题目来源: Codeforces 题意: 给出一些比赛, ...

  6. [Codeforces Gym 101651/100725B] Banal Tickets

    Codeforces Gym 100725 题解: 先分两种情况, 积为000与积非0" role="presentation" style="position ...

  7. CodeForces - 1000D:Yet Another Problem On a Subsequence (DP+组合数)

    CodeForces - 1000D:Yet Another Problem On a Subsequence (DP+组合数) 题目大意:这题目啊,贼难理解- 定义一个数列是"好的&quo ...

  8. 【CodeForces 1042B --- Vitamins】DP+位运算

    [CodeForces 1042B --- Vitamins]DP+位运算 题目来源:点击进入[CodeForces 1042B - Vitamins] Description Berland sho ...

  9. Codeforces 1088E Ehab and a component choosing problem(树形DP)

    Codeforces 1088E Ehab and a component choosing problem(树形DP) 题意 给一棵树,要求从中选一些联通分量,使得平均联通分量重量总和最大.如果有多 ...

最新文章

  1. linux求文件共有行。多个文件求共有行交集完全匹配-w
  2. hdu4772 水模拟
  3. html事件绑定的方法,javascript实现简单的on事件绑定
  4. 2.10 数据增强-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  5. 基于cnn的短文本分类_NLP.TM[15] | 短文本相似度CNN_SIM
  6. 从 Spark 的 DataFrame 中取出具体某一行详解
  7. 计算机网络 --- 网络层IP数据报
  8. 开源一站式移动应用生成平台Jingub系列(0):背景资料介绍
  9. 从angularJS看MVVM
  10. java 设置启动参数设置_1.java程序启动参数配置
  11. CMM3下的应用及改进
  12. Linux服务器安全加固
  13. 思科网络安全解决方案
  14. Q# 微软量子计算编程语言
  15. 毕业了,我的四年大学:平凡但不平庸(写给每一位想要认真学习的小伙伴)
  16. java做节奏大师,节奏大师:音浪太强太迷茫?做到这些轻轻松松成为“节奏大师”...
  17. 官网---2019年上半年软考报名时间
  18. python中美元人汇率_Python爬虫练习:爬取美元历史汇率
  19. 下载并安装 Metricbeat
  20. js判断是否是苹果浏览器

热门文章

  1. DirectDraw 简单示例
  2. 购机心得/指南,帮你选出心仪LAPTOP
  3. mysql 千万级数据的导入导出
  4. 迭代重加权最小二乘法的理解
  5. pytorch中的gather()函数
  6. 如何用java代码生成Word文档和签字以及导出pdf文件
  7. 三名学霸与计算机的缘,2020清华特奖入围名单公布:电子系学霸两篇顶会一作,2名计算机女生入选...
  8. 用于C++项目的vim配置
  9. vscode 设置代码格式化缩进为2个空格
  10. spring事务实例