题目链接

  好的

  看到这题之后我一直在想反演,然后想不出来,一度以为自己脑子有问题

  然后我脑子真的有问题,这题tm根本就不是反演

  设f[i][j][k][l]表示现在已经DP到从高位往低数的第i位,有没有碰到n的上界,有没有碰到m的上界,有没有碰到k的上界

  然后记忆化DFS搞一搞,把方案数和异或和都记录下来,最后减掉输出

  

#include<cstdio>
#include<cstring>
#include<cctype>
#include<cstdlib>
#include<algorithm>
#define maxn 50
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} long long n,m,e,mod; struct Ans{
long long xum,sum;
}f[][][][];
bool vis[][][][]; long long Maxi; void dfs(long long len,long long nown,long long nowm,long long nowk){
if(len>Maxi){
f[len][nown][nowm][nowk]=(Ans){,};
return;
}
if(vis[len][nown][nowm][nowk]) return;
Ans &ret=f[len][nown][nowm][nowk];
vis[len][nown][nowm][nowk]=;
long long mn=(n>>(Maxi-len))&,mm=(m>>(Maxi-len))&,mk=(e>>(Maxi-len))&;
for(long long i=;i<=(nown?mn:);++i)
for(long long j=;j<=(nowm?mm:);++j){
if(nowk&&(i^j)<mk) continue;
dfs(len+,nown&&(i==mn),nowm&&(j==mm),nowk&&((i^j)==mk));
Ans now=f[len+][nown&&(i==mn)][nowm&&(j==mm)][nowk&&(i^j)==mk];
ret.sum=(ret.sum+now.sum)%mod;
ret.xum=(ret.xum+(1ll<<(Maxi-len))*(i^j)%mod*now.sum+now.xum)%mod;
}
return;
} int main(){
long long T=read();
while(T--){
n=read()-;m=read()-;e=read();mod=read();
memset(vis,,sizeof(vis)); Maxi=;
memset(f,,sizeof(f));
long long nn=n,nm=m,ne=e;long long cnt=;
while(nn){ cnt++; nn>>=;}
Maxi=max(Maxi,cnt); cnt=;
while(nm){ cnt++; nm>>=;}
Maxi=max(Maxi,cnt); cnt=;
while(ne){ cnt++; ne>>=;}
Maxi=max(Maxi,cnt);
dfs(,,,);
Ans now=f[][][][];
long long ans=(now.xum%mod-(e%mod)*now.sum%mod+mod)%mod;
printf("%lld\n",ans);
}
return ;
}

【Luogu】P4067储能表(数位DP)的更多相关文章

  1. BZOJ 4513: [Sdoi2016]储能表 [数位DP !]

    4513: [Sdoi2016]储能表 题意:求\[ \sum_{i=0}^{n-1}\sum_{j=0}^{m-1} max((i\oplus j)-k,0) \] 写出来好开心啊...虽然思路不完 ...

  2. 【BZOJ4513】[Sdoi2016]储能表 数位DP

    [BZOJ4513][Sdoi2016]储能表 Description 有一个 n 行 m 列的表格,行从 0 到 n−1 编号,列从 0 到 m−1 编号.每个格子都储存着能量.最初,第 i 行第 ...

  3. BZOJ.4513.[SDOI2016]储能表(数位DP)

    BZOJ 洛谷 切了一道简单的数位DP,终于有些没白做题的感觉了...(然而mjt更强没做过这类的题也切了orz) 看部分分,如果\(k=0\),就是求\(\sum_{i=0}^n\sum_{j=0} ...

  4. [SDOI2016]储能表——数位DP

    挺隐蔽的数位DP.少见 其实减到0不减了挺难处理.....然后就懵了. 其实换个思路: xor小于k的哪些都没了, 只要留下(i^j)大于等于k的那些数的和以及个数, 和-个数*k就是答案 数位DP即 ...

  5. 4513: [Sdoi2016]储能表 数位DP

    国际惯例的题面: 听说这题的正解是找什么规律,数位DP是暴力......好的,我就写暴力了QAQ.我们令f[i][la][lb][lc]表示二进制从高到低考虑位数为i(最低位为1),是否顶n上界,是否 ...

  6. BZOJ4513: [Sdoi2016]储能表(数位dp)

    题意 题目链接 Sol 一点思路都没有,只会暴力,没想到标算是数位dp??Orz 首先答案可以分成两部分来统计 设 \[ f_{i,j}= \begin{aligned} i\oplus j & ...

  7. [bzoj4513][SDOI2016]储能表——数位dp

    题目大意 求 \[\sum_{i = 0}^{n-1}\sum_{j=0}^{m-1} max((i\ xor\ j)\ -\ k,\ 0)\ mod\ p\] 题解 首先,开始并没有看出来这是数位d ...

  8. [Luogu P4124] [CQOI2016]手机号码 (数位DP)

    题面 传送门:洛咕 Solution 感谢神仙@lizbaka的教学 这题是数位DP的非常非常模板的题目,只是状态有点多 . 这题我使用记忆化搜索实现的 中国有句古话说的好,有多少个要求就设多少个状态 ...

  9. 数位DP复习笔记

    前言 复习笔记第五篇.(由于某些原因(见下),放到了第六篇后面更新)CSP-S RP++. luogu 的难度评级完全不对,所以换了顺序,换了别的题目.有点乱,见谅.要骂就骂洛谷吧,原因在T2处 由于 ...

随机推荐

  1. 【BZOJ1036】[ZJOI2008] 树的统计Count(一道可怕的模板题:树剖+线段树)

    点此看题面 题解 这真的只是一道模板题:一个树链剖分套上一个线段树(令我窒息的组合). 既然是模板题,那就直接上代码吧. 代码 #include<bits/stdc++.h> #defin ...

  2. 漫谈 Clustering (番外篇): Dimensionality Reduction

    由于总是有各种各样的杂事,这个系列的文章竟然一下子拖了好几个月,(实际上其他的日志我也写得比较少),现在决定还是先把这篇降维的日志写完.我甚至都以及忘记了在这个系列中之前有没有讲过“特征”(featu ...

  3. python linecache模块读取文件用法详解

    linecache模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行. linecache.getlines(filename) 从名为filename的文件中得到 ...

  4. Activiti学习记录(五)

    1.排他网关 说明: 1) 一个排他网关对应一个以上的顺序流 2) 由排他网关流出的顺序流都有个conditionExpression元素,在内部维护返回boolean类型的决策结果. 3) 决策网关 ...

  5. CSS 样式、布局、盒子模型

    Css内容: 常用样式: 字体    颜色   背景 布局: 浮动   定位   标签特性 标签盒子模型:  边距   边框 动画: 旋转 渐变 注意:Css引路径从css文件里找   Html和js ...

  6. 第十一篇、UITableView headerview下拉放大

    核心代码: -(void)createTableViewHeaderView{ _tableViewHeaderView = [[UIView alloc] initWithFrame:(CGRect ...

  7. 重载&重写

    重载:同一个类中,方法名相同,方法参数不同(参数个数.参数类型),返回类型无关,所以返回类型不能作为重载的区别依据. 重写:子父类中,子类的方法名.参数位置.参数个数.返回类型和父类一致,方法体不同 ...

  8. 配置vim nginx.conf高亮

    #!/bin/bashwget http://www.vim.org/scripts/download_script.php?src_id=14376 -O nginx.vimmv nginx.vim ...

  9. js数据结构与算法--递归

    递归,函数自己调用自己 return 返回值, 后面的代码不执行 function fn(num){ console.log(num) if(num == 0){ return; } fn(num-1 ...

  10. 自动化运维之使用Python3收发电子邮件~~~附源码

    一.背景介绍   1.1  一些专业名称的解释 MUA——Mail User Agent,邮件用户代理.是用户与电子邮件系统的交互接口,一般来说它就是我们PC机上的一个程序,提供一个好的用户界面,它提 ...