[SDOI2016]储能表——数位DP
挺隐蔽的数位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=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=;
ll n,m,k;
ll mod;
ll f[N][][][];
ll g[N][][][];
int main(){
int t;
rd(t);
while(t--){
scanf("%lld%lld%lld%lld",&n,&m,&k,&mod);
--n;--m;
memset(g,,sizeof g);memset(f,,sizeof f);
g[][][][]=;
for(reg p=;p>=;--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=;i<=;++i){//i
for(reg j=;j<=;++j){//j
for(reg l=;l<=;++l){//lim n
for(reg r=;r<=;++r){//lim m
for(reg o=;o<=;++o){//lim k
if((l&&i>nn)||(r&&j>nm)||(o&&((i^j)<nk))) continue;
(f[p][((!l)||(i<nn))?:][((!r)||(j<nm))?:][((!o)||((i^j)>nk))?:]+=(f[p+][l][r][o]+(ll)(i^j)*(1LL*<<p)%mod*g[p+][l][r][o]%mod)%mod)%=mod;
(g[p][((!l)||(i<nn))?:][((!r)||(j<nm))?:][((!o)||((i^j)>nk))?:]+=(g[p+][l][r][o]))%=mod;
}
}
}
}
}
}
ll ans=;
ll tmp=;
for(reg l=;l<=;++l){//lim n
for(reg r=;r<=;++r){//lim m
for(reg o=;o<=;++o){//lim k
(ans+=f[][l][r][o])%=mod;
(tmp+=g[][l][r][o])%=mod;
}
}
}
k%=mod;
ans=(ans%mod-tmp%mod*k%mod+mod)%mod;
printf("%lld\n",ans%mod);
}
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/2/26 18:48:55
*/
如果想到统计<=k的和和个数的话,就是一个限制比较多(维度多)的数位DP罢了。
[SDOI2016]储能表——数位DP的更多相关文章
- BZOJ 4513: [Sdoi2016]储能表 [数位DP !]
4513: [Sdoi2016]储能表 题意:求\[ \sum_{i=0}^{n-1}\sum_{j=0}^{m-1} max((i\oplus j)-k,0) \] 写出来好开心啊...虽然思路不完 ...
- 【BZOJ4513】[Sdoi2016]储能表 数位DP
[BZOJ4513][Sdoi2016]储能表 Description 有一个 n 行 m 列的表格,行从 0 到 n−1 编号,列从 0 到 m−1 编号.每个格子都储存着能量.最初,第 i 行第 ...
- BZOJ.4513.[SDOI2016]储能表(数位DP)
BZOJ 洛谷 切了一道简单的数位DP,终于有些没白做题的感觉了...(然而mjt更强没做过这类的题也切了orz) 看部分分,如果\(k=0\),就是求\(\sum_{i=0}^n\sum_{j=0} ...
- 4513: [Sdoi2016]储能表 数位DP
国际惯例的题面: 听说这题的正解是找什么规律,数位DP是暴力......好的,我就写暴力了QAQ.我们令f[i][la][lb][lc]表示二进制从高到低考虑位数为i(最低位为1),是否顶n上界,是否 ...
- BZOJ4513: [Sdoi2016]储能表(数位dp)
题意 题目链接 Sol 一点思路都没有,只会暴力,没想到标算是数位dp??Orz 首先答案可以分成两部分来统计 设 \[ f_{i,j}= \begin{aligned} i\oplus j & ...
- [bzoj4513][SDOI2016]储能表——数位dp
题目大意 求 \[\sum_{i = 0}^{n-1}\sum_{j=0}^{m-1} max((i\ xor\ j)\ -\ k,\ 0)\ mod\ p\] 题解 首先,开始并没有看出来这是数位d ...
- 4513: [Sdoi2016]储能表
4513: [Sdoi2016]储能表 链接 分析: 数位dp. 横坐标和纵坐标一起数位dp,分别记录当前横纵坐标中这一位是否受n或m的限制,在记录一维表示当前是否已经大于k了. 然后需要两个数组记录 ...
- 【LG4067】[SDOI2016]储能表
[LG4067][SDOI2016]储能表 题面 洛谷 题解 这种$n$.$m$出奇的大的题目一看就是数位$dp$啦 其实就是用一下数位$dp$的套路 设$f[o][n][m][k]$表示当前做到第$ ...
- BZOJ4513 SDOI2016 储能表 记忆化搜索(动态规划)
题意: 题面中文,不予翻译:SDOI2016储能表 分析: 据说有大爷用一些奇怪的方法切掉了这道题%%%%% 这里用的是大众方法——动态规划. 其实这是一道类似于二进制数位dp的动态规划题,(但是实际 ...
随机推荐
- C#编程:从控制台读取数字的两种方式
有时需要从控制台输入数字,就用到前面介绍的内容,数据转换,如:int num=int.Pares(Console.ReadLine()); int num=Convert.ToInt32(Consol ...
- CentOS6下OpenLDAP+PhpLdapAdmin基本安装及主从/主主高可用模式部署记录
下面测试的部署机ip地址为:192.168.10.2051)yum安装OpenLDAP [root@openldap-server ~]# yum install openldap openldap- ...
- B树、B-树、B+树、B*树相关
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...
- SpringMVC视图解析器概述
不论控制器返回一个String,ModelAndView,View都会转换为ModelAndView对象,由视图解析器解析视图,然后,进行页面的跳转. 控制器处理方法---->ModelAndV ...
- ubuntu16.04下载安装navicate
1.下载试用版本地址: https://www.navicat.com.cn/download/navicat-premium 2.解压缩 tar -zxvf /home/rain/download ...
- shell脚本--权限分配
因为shell脚本内部是很多命令的集合,这些命令也许会涉及到操作某一个文件,而且shell脚本的运行,也是需要当前用户对脚本具有运行的权限,否则,会因为权限不够而失败. 首先最重要的一点:修改权限,只 ...
- linux_shell自定义命令
一.命令可执行文件所在目录 shell命令可执行文件所在目录是保存在环境变量PATH中的,终端输入如下命令查看 PATH 环境变量的内容: $ echo $PATH 我的linux输出如下: /opt ...
- SAP PP顾问面试题及资料
SAP PP顾问面试试题及资料 1.主数据 组织架构 •SAP中主要的组织架构有哪些?哪些用于PP的组织架构?•成本控制范围.公司代码.估价范围.工厂.库存地点之间的关系 物料主数据 •不同的物料主数 ...
- pandas切片使用和column赋值
#-*- coding: utf-8 -*- #对数据进行基本的探索 #返回缺失值个数以及最大最小值 import pandas as pd datafile= '../data/air_data.c ...
- python箱型图
#-*- coding: utf-8 -*- import pandas as pd catering_sale = '../data/catering_sale.xls' #餐饮数据 data = ...