时间限制:20000ms

单点时限:1000ms

内存限制:256MB

描述

给定一个长度为 n 的序列 a[1..n],定义函数 f(b[1..m]) 的值为在 [0,m-1] 内满足如下条件的 i 的数目:

b 中前 i 个数异或起来的值小于 b 中前 i +1个数异或起来的值。

对于 a[1..n] 的每个子序列 b[1..m],求f(b[1..m])之和。

输入

第一行一个正整数 n。

接下来一共有 n 行。第 i+1 行包含一个非负整数 a[i]。

1 ≤ n ≤ 105

0 ≤ a[i] < 231

输出

输出答案对 998244353 取模后的值。

样例输入

2

1

2

样例输出

4

题解

dp[j][k]代表前i个数里第j位是k的子序列的个数,状态转移方程为:

$(1)dp[j][k]=dp[j][k]+dp[j][!k] $

--->当a[i]的第j位为1

\((2)dp[j][k]=dp[j][k]*2\)

--->当a[i]的第j位为0

那么,最后的答案为

\[\sum\limits_{j=0}^{j<=31}{dp[j][0]\times2^{n-i}}
\]

参考代码

#include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define ll long long
#define inf 30005
using namespace std;
int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void Out(ll a){
if(a<0) putchar('-'),a=-a;
if(a>=10) Out(a/10);
putchar(a%10+'0');
}
const int N=100000+10,SIGMA=31,MOD=998244353;
int a[N],b[N],dp[SIGMA+10][2];
int main(){
int n=read(),ans=0;
for(int i=1;i<=n;i++) a[i]=read();
b[0]=1;
for(int i=1;i<=n;i++) b[i]=(ll)b[i-1]*2%MOD;
for(int i=0;i<=SIGMA;i++) dp[i][0]=1;
for(int i=1;i<=n;i++){
for(int j=SIGMA;i>=0;j--) if(a[i]&(1<<j)){
ans=(ans+(ll)dp[j][0]*b[n-i])%MOD;
break;
}
for(int j=0;j<=SIGMA;j++){
int l=dp[j][0],r=dp[j][1];
if (a[i]&(1<<j)){
dp[j][0]=(l+r)%MOD;
dp[j][1]=(l+r)%MOD;
}
else{
dp[j][0]=l*2%MOD;
dp[j][1]=r*2%MOD;
}
}
}
Out(ans);
puts("");
return 0;
}

【HIHOCODER 1526】 序列的值(二进制DP)的更多相关文章

  1. hihocoder 1526 序列的值

    题面在这里! 好久没做题啦,养生一下qwq 推一推贡献就会发现这TM就是一个水题啊! #include<bits/stdc++.h> #define ll long long using ...

  2. NOIP2011pj表达式的值[树形DP 笛卡尔树 | 栈 表达式解析]

    题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例如:计算表达式A⊕B × ...

  3. 【洛谷】4310: 绝世好题【二进制DP】

    P4310 绝世好题 题目描述 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). 输入输出格式 输入格式: 输入文件共2行 ...

  4. 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP

    洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...

  5. POJ 3162 bit区间查询最值+树形DP

    POJ 3162 『题目链接』POJ 3162 『题目类型』bit区间查询最值+树形DP ✡Problem: 一棵n个节点的树.wc爱跑步,跑n天,第i天从第i个节点开始跑步,每次跑到距第i个节点最远 ...

  6. Oracle 序列(查询序列的值,修改序列的值)

    1.序列的语法形式 create sequence 序列名 increment by n start with n maxvalue n | nomaxvalue minvalue n | nomin ...

  7. hihocoder Challenge 29 A.序列的值

    我现在就感觉我这人现在真的没有dp的意识 其实真写起来也不难,但是把就是练的少思维跟不上,dp从根本上就是一种状态的提炼和聚集. 按照题解的意思来,表示二进制第i位的值为j(0,1)的组合有多少,然后 ...

  8. hihoCoder挑战赛28 题目2 : 二进制翻转

    题目2 : 二进制翻转 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 定义函数 Rev(x) 表示把 x 在二进制表示下翻转后的值 例如: Rev(4)=1,因为 4 ...

  9. 【BZOJ3675】【APIO2014】序列分割 [斜率优化DP]

    序列分割 Time Limit: 40 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 小H最近迷上了一个分隔序列的游戏. ...

随机推荐

  1. Cloudera Manager架构原理

    cloudera manager的核心是管理服务器,该服务器承载管理控制台的Web服务器和应用程序逻辑,并负责安装软件,配置,启动和停止服务,以及管理上的服务运行群集. Cloudera Manage ...

  2. EditPlus 3:设置自动换行

    打开软件,菜单栏点击Document,再在下拉栏中点击Permanent Settings,然后在弹出的设置框中找到Word Wrap点击,最后在弹出的小框中勾选第一个Enable word wrap ...

  3. UVA - 1658 Admiral

    3. C - Admiral 题意:给定v(3<=v<=1000)个节点,e(3<=e<=10000)条边的又向加权图,求1->v的两条不相交的路径,使得权和最小. 思路 ...

  4. DP+高精度 URAL 1036 Lucky Tickets

    题目传送门 /* 题意:转换就是求n位数字,总和为s/2的方案数 DP+高精度:状态转移方程:dp[cur^1][k+j] = dp[cur^1][k+j] + dp[cur][k]; 高精度直接拿J ...

  5. h5-16-插入SVG图片

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 515 Find Largest Value in Each Tree Row 在每个树行中找最大值

    在二叉树的每一行中找到最大的值.示例:输入:           1         /  \        3   2       /  \    \        5   3    9 输出: [ ...

  7. CF963A Alternating Sum

    思路:利用周期性转化为等比数列求和. 注意当a != b的时候 bk * inv(ak) % (109 + 9)依然有可能等于1,不知道为什么. 实现: #include <bits/stdc+ ...

  8. postgresql 9.4.17 64位安装说明

    本文在win 7 64位下安装postgresql 9.4.17 64位版,安装过程有录入项的界面都有截图 运行安装程序开始安装 开始时可能自动安装c++运行环境 然后正式开始安装 安装目录位置,不要 ...

  9. The lion king 经典句型摘录

    What am I going to do with him? Everything the light touches is our kingdom. But I thought a king ca ...

  10. 11G GI启动顺序

    --11gR2 Clusterware and Grid Home - What You Need to Know (文档 ID 1053147.1)         上图来自<Oracle C ...