国际惯例的题面:

听说这题的正解是找什么规律,数位DP是暴力......
好的,我就写暴力了QAQ。
我们令f[i][la][lb][lc]表示二进制从高到低考虑位数为i(最低位为1),是否顶n上界,是否顶m上界,是否顶k下界的数字和,g[i][la][lb][lc]表示(同上定义)的数字个数。
转移的话,先计算出这一位n,m,k的限制,然后枚举这一位第一个数和第二个数填什么,判定xor和是否满足k的条件,转移即可。
记忆化搜索实现较为简单。
注意最后计算答案的时候,方案数乘以k可能爆long long,所以k要先取模。

代码:
(就算我WA了,TLE了,代码写的像屎一样,也不include<iostream>!pair真好用。)

 #include<cstdio>
#include<algorithm>
#include<cstring>
typedef long long int lli;
const int maxn=1e2+1e1; lli f[maxn][][][],g[maxn][][][]; // f is sum , g is count .
int ba[maxn],bb[maxn],bc[maxn],mod; inline void dfs(int bit,int la,int lb,int lc) { // bit is the bit that we are determining in range [1,64] .
if( ~f[bit][la][lb][lc] ) return;
if( !bit ) {
f[bit][la][lb][lc] = , g[bit][la][lb][lc] = ;
return;
} int lima = !la || ba[bit] , limb = !lb || bb[bit] , limc = lc && bc[bit];
f[bit][la][lb][lc] = g[bit][la][lb][lc] = ;
for(int i=;i<=lima;i++) for(int j=;j<=limb;j++) if( ( i ^ j ) >= limc ) {
int ta = la&&i==lima , tb = lb&&j==limb , tc = lc&&(i^j)==limc;
dfs(bit-,ta,tb,tc);
g[bit][la][lb][lc] = ( g[bit][la][lb][lc] + g[bit-][ta][tb][tc] ) % mod ,
f[bit][la][lb][lc] = ( f[bit][la][lb][lc] + f[bit-][ta][tb][tc] + ( (lli) ( i ^ j ) << ( bit - ) ) % mod * g[bit-][ta][tb][tc] % mod ) % mod;
}
} inline int cutbit(lli t,int* dst) {
int ret = ; memset(dst,,sizeof(int)*maxn);
while(t) dst[++ret] = t & , t >>= ;
return ret;
} int main() {
static int T,mx;
static lli n,m,k,ans;
scanf("%d",&T);
while(T--) {
scanf("%lld%lld%lld%d",&n,&m,&k,&mod) , --n , --m , memset(f,-,sizeof(f)) , memset(g,,sizeof(g)) , mx = std::max( cutbit(k,bc) , std::max( cutbit(n,ba) , cutbit(m,bb) ) ) ,
dfs(mx,,,) , ans = (f[mx][][][]-g[mx][][][]*(k%mod)%mod+mod)%mod , printf("%lld\n",ans);
}
return ;
}

く遠く続いてる 空
遥远地 遥远地 无尽延伸的天空
その向こうで 君は 何想う
彼方的你 现在正想些什么
いつか消える あの星の下
在那颗终会陨落的星星下
永遠(とわ)を願い 想い見上げ
翘首仰望着 祈求着永恒

強く弱く光を放つ
灿烂的 黯淡的 明灭闪耀的星光
君の近くに 北斗七星
在你身边的 北斗七星
そんな 輝きであるように
我想像它一样照耀着你
君を想い 願い掛けて
思念着你 许下了愿望

4513: [Sdoi2016]储能表 数位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. BZOJ.4513.[SDOI2016]储能表(数位DP)

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

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

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

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

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

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

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

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

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

  7. 4513: [Sdoi2016]储能表

    4513: [Sdoi2016]储能表 链接 分析: 数位dp. 横坐标和纵坐标一起数位dp,分别记录当前横纵坐标中这一位是否受n或m的限制,在记录一维表示当前是否已经大于k了. 然后需要两个数组记录 ...

  8. bzoj 4513 [Sdoi2016]储能表

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4513 题解 要求的式子 用数位dp的方法去做 我们把式子拆开 变成 $\sum_{i=0}^ ...

  9. 【LG4067】[SDOI2016]储能表

    [LG4067][SDOI2016]储能表 题面 洛谷 题解 这种$n$.$m$出奇的大的题目一看就是数位$dp$啦 其实就是用一下数位$dp$的套路 设$f[o][n][m][k]$表示当前做到第$ ...

随机推荐

  1. Linux注销&登陆

    ⒈注销 ①在命令行使用logout,此指令在图形界面无效.

  2. Sql Server 2008 数据库18456错误怎么解决?

    可以windows连接,以前都可以,昨天突然就不可以用SQL连接,报18456错误. 1.以windows验证模式进入数据库管理器. 2.右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码( ...

  3. Excel中快捷键Ctrl+End覆盖过多

    Sub dd() MsgBox ActiveSheet.UsedRange.Address End Sub 更简单的方法:通过快捷键,选中空白行/列,然后删除行/列,保存,OK!

  4. 笔记软件 notion

    笔记软件 notion :     https://www.notion.so 注册:zengxinle@126.com     团队:Hopesun

  5. java工程添加类库

    在属性中添加自定义类库 在工程中引入自定义类库

  6. 转载:2.2.3 配置项的注释《深入理解Nginx》(陶辉)

    原文:https://book.2cto.com/201304/19628.html 如果有一个配置项暂时需要注释掉,那么可以加"#"注释掉这一行配置.例如: #pid       ...

  7. vue系列之webstrom的设置

    1.安装vue插件,方法 Setting->Plugins,点击Plugins,在右边输入vue,找到相应插件,然后安装 2.创建vue模板 注意红圈里面的 3.设置vue文件支持的样式 注意: ...

  8. Centos7 通过yum命令安装jdk1.8

    直接安装,不看原因 yum install java-1.8.0-openjdk* -y 1 分割线上下之选一个看即可. —————————————华丽的分割线—————————————— 先查看系统 ...

  9. java lambda 的用法

    一.打印数组 String[] s = "fdsfsdfds".split(""); Stream<String> str = Stream.of( ...

  10. python3笔记(二)Python语言基础

    缩进 要求严格的代码缩进是python语法的一大特色,就像C语言家族(C.C++.Java等等)中的花括号一样重要,在大多数场合还非常有必要.在很多代码规范里面也都有要求代码书写按照一定的规则进行换行 ...