挺隐蔽的数位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的更多相关文章

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

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

  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. 【LG4067】[SDOI2016]储能表

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

  9. BZOJ4513 SDOI2016 储能表 记忆化搜索(动态规划)

    题意: 题面中文,不予翻译:SDOI2016储能表 分析: 据说有大爷用一些奇怪的方法切掉了这道题%%%%% 这里用的是大众方法——动态规划. 其实这是一道类似于二进制数位dp的动态规划题,(但是实际 ...

随机推荐

  1. [UWP 自定义控件]了解模板化控件(9):UI指南

    1. 使用TemplateSettings统一外观 TemplateSettings提供一组只读属性,用于在新建ControlTemplate时使用这些约定的属性. 譬如,修改HeaderedCont ...

  2. LVM : 缩减文件系统的容量

    有扩展就有缩减,我们在前文<LVM : 扩展文件系统的容量>中介绍了通过 LVM 扩展文件系统的方法,本文我们接着前文的 demo 介绍通过 LVM 缩减文件系统的方法.说明:本文的演示环 ...

  3. centos7.4下Jira6环境部署及破解操作记录(完整版)

    废话不多说,以下记录了Centos7针对Jira6的安装,汉化,破解的操作过程,作为运维笔记留存. 0) 基础环境 192.168.10.212 Centos7.4 mysql 5.6 jdk 1.8 ...

  4. websocket(三)——基于node sockit.io的即时通讯

    通过前面的学习发现,常见的websocket虽然可以很好地实现服务端和客户端的信息传递,但二者之间传递的数据只是简单的字符串,这对事物的描述,信息的传递是非常不友好的,下面将引入socket.io,来 ...

  5. 作业七:Linux内核如何装载和启动一个可执行程序

    作业七:Linux内核如何装载和启动一个可执行程序 一.编译链接的过程和ELF可执行文件格式 可执行文件的创建——预处理.编译和链接 在object文件中有三种主要的类型. 一个可重定位(reloca ...

  6. 20135327郭皓--Linux内核分析第八周 进程的切换和系统的一般执行过程

    第八周 进程的切换和系统的一般执行过程 一.进程切换的关键代码switch_to分析 1.进程调度与进程调度的时机分析 不同类型的进程有不同的调度需求 第一种分类: I/O-bound:频繁进行I/O ...

  7. Asp.net框架与SpringMvc框架简单分析

    (此文为自我总结,错误很多请勿借鉴) 1.就前两天分析SpringMvc框架中是通过controler来实现跳转页面,通过mapping来实现数据连接 分析的方法又通过java的类之间进行相互调用,个 ...

  8. Hibernate_HQL

    public class According_condition { public static void main(String[]args){ Session session=HibernateU ...

  9. java mail session使用Properties的clone方法

    /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreem ...

  10. slf4j的java包冲突问题