挺隐蔽的数位DP。少见

其实减到0不减了挺难处理。。。。。然后就懵了。

其实换个思路:

xor小于k的哪些都没了,

只要留下(i^j)大于等于k的那些数的和以及个数,

和-个数*k就是答案

数位DP即可

f[i][0/1][0/1][0/1]表示,前i位,对n,m,k有无限制<=n,<=m,>=k?,xor值的总和

g[i][0/1][0/1][0/1]表示,前i位,对n,m,k有无限制<=n,<=m,>=k?,合法的方案数

然后枚举这一位的n,m数位填什么转移

注意爆int和爆long long:
1.1<<p爆int,这个还很大,必须立刻取模

2.最后tmp*k爆long long,k先对p取模

不稳啊~~

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define int long long
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(ll &x){char ch;x=0;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=66;
ll n,m,k;
ll mod;
ll f[N][2][2][2];
ll g[N][2][2][2];
int main(){    int t;rd(t);while(t--){scanf("%lld%lld%lld%lld",&n,&m,&k,&mod);--n;--m;memset(g,0,sizeof g);memset(f,0,sizeof f);g[61][1][1][1]=1;        for(reg p=60;p>=0;--p){int nn=(n>>p)&1LL,nm=(m>>p)&1LL,nk=(k>>p)&1LL;//    cout<<" wei "<<p<<endl;//    cout<<nn<<" "<<nm<<" "<<nk<<endl;for(reg i=0;i<=1;++i){//ifor(reg j=0;j<=1;++j){//jfor(reg l=0;l<=1;++l){//lim nfor(reg r=0;r<=1;++r){//lim mfor(reg o=0;o<=1;++o){//lim kif((l&&i>nn)||(r&&j>nm)||(o&&((i^j)<nk))) continue;(f[p][((!l)||(i<nn))?0:1][((!r)||(j<nm))?0:1][((!o)||((i^j)>nk))?0:1]+=(f[p+1][l][r][o]+(ll)(i^j)*(1LL*1<<p)%mod*g[p+1][l][r][o]%mod)%mod)%=mod;(g[p][((!l)||(i<nn))?0:1][((!r)||(j<nm))?0:1][((!o)||((i^j)>nk))?0:1]+=(g[p+1][l][r][o]))%=mod;}}}}}}ll ans=0;ll tmp=0;for(reg l=0;l<=1;++l){//lim nfor(reg r=0;r<=1;++r){//lim mfor(reg o=0;o<=1;++o){//lim k(ans+=f[0][l][r][o])%=mod;(tmp+=g[0][l][r][o])%=mod;    }}}k%=mod;ans=(ans%mod-tmp%mod*k%mod+mod)%mod;printf("%lld\n",ans%mod);}return 0;
}}
signed main(){Miracle::main();return 0;
}/*Author: *Miracle*Date: 2019/2/26 18:48:55
*/

如果想到统计<=k的和和个数的话,就是一个限制比较多(维度多)的数位DP罢了。

转载于:https://www.cnblogs.com/Miracevin/p/10439639.html

[SDOI2016]储能表——数位DP相关推荐

  1. bzoj4513 [Sdoi2016]储能表 dp

    这种数位dp第一次见.. 其实应该是利用位运算相互独立来避免后效性 一般的数位dp只有一个范围 这个题有三个范围.. 由于数位和整个数的大小没直接关系,所以就需要用状态记录 首先不合法的一定不转移,对 ...

  2. [SDOI2016]储能表

    Description 有一个 n 行 m 列的表格,行从 0 到 n−1 编号,列从 0 到 m−1 编号.每个格子都储存着能量.最初,第 i 行第 j 列的格子储存着 (i xor j) 点能量. ...

  3. bzoj千题计划277:bzoj4513: [Sdoi2016]储能表

    http://www.lydsy.com/JudgeOnline/problem.php?id=4513 f[i][0/1][0/1][0/1] 从高到低第i位,是否卡n的上限,是否卡m的上限,是否卡 ...

  4. 「SDOI2016」储能表(数位dp)

    「SDOI2016」储能表(数位dp) 神仙数位 \(dp\) 系列 可能我做题做得少 \(QAQ\) \(f[i][0/1][0/1][0/1]\) 表示第 \(i\) 位 \(n\) 是否到达上界 ...

  5. 暑假D16 T3 密道(数位DP? 打表找规律)

    题意 对于一个(n+1)*(n+1)的矩阵,第一列和第一排为1,其他位置为1当且仅当上方和左方有一个1,其他为0: 对于100%的数据,n<=1e9 题解 稍微画了一下,感觉从图像看不大出来,就 ...

  6. CF809C(找规律+数位DP)

    老年选手需要多写一些思维题qwq. 通过打表很容易发现对于(i,j),值为(i-1)^(j-1)+1,然后本题就没了qwq. 矩阵差分还是很容易想到的,容斥成四个矩阵. 然后看到异或很容易想到三件事: ...

  7. Xorequ(BZOJ3329+数位DP+斐波那契数列)

    题目链接 传送门 思路 由\(a\bigoplus b=c\rightarrow a=c\bigoplus b\)得原式可化为\(x\bigoplus 2x=3x\). 又异或是不进位加法,且\(2x ...

  8. 牛客练习赛34 E little w and Digital Root(数位dp)

    title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...

  9. SDUT - 2609 A-Number and B-Number(二分+数位dp)

    题目链接:点击查看 题目大意:规定 A 数组为所有十进制下含有 7 或者可以被 7 整除的数字,例如 A 数组中的前 10 个数为: {a[1]=7,a[2]=14,a[3]=17,a[4]=21,a ...

  10. HDU4389(数位DP)

    题目:X mod f(x) 题意:问在区间[A,B]之间,有多少个数满足,x%f(x)=0,f(x)代表x的各位数字之和. 解析:本题一是可以通过打表来计算,二是可以通过数位DP来求解. 我们先来说打 ...

最新文章

  1. NODEJS 使用 XLSX模块导出excel文件
  2. exportfs命令和FTP服务
  3. shell脚本--02循环与条件
  4. 保存Activity的状态
  5. Java的二十三种设计模式(适配器模式(Adapter)、对象的适配器模式)
  6. 在Eclipse 2.0中使用版本控制系统CVS
  7. 在使用 ADO.NET 导出 Excel 文件时,设置 IMEX=1 仍不能导出所有数据的解决办法
  8. codeforces:CF750 复盘
  9. 【数据结构1.3笔记】研究内容
  10. 中国象棋将帅问题java_编程之美读书笔记1.2——中国象棋将帅问题
  11. sprint test 添加事务回滚机制
  12. NGINX配置之二: nginx location proxy_pass 后面的url 加与不加/的区别.
  13. 16qam matlab 误码率,16qam的误码率公式
  14. mac苹果系统的电脑ip地址命令
  15. NTFS与FAT32区别
  16. FastReport for Delphi
  17. Javascript 在循环中使用Promise对象
  18. 金融直播APP方案开发
  19. 安卓 电子围栏_手机电子围栏是什么
  20. Webservice的测试环境 网上现有的几个webservice

热门文章

  1. 拓端tecdat|R语言中的隐马尔可夫HMM模型实例
  2. 拓端tecdat|数据岗位现状调查报告
  3. 拓端tecdat|红圈律所微信公众号图文数据报告
  4. 7-1 购买火车票 (15 point(s))
  5. (23)Linux下Clion中搭建opencv环境
  6. (16)机器学习_ROC曲线绘制
  7. Python脚本实现深大校园网网页登陆
  8. gitlab提交代码
  9. 【转载】基于Deep Learning的中文分词尝试
  10. Java如何实现原子操作