[数位DP] ZROI 2017 提高3 T1 树状数组
来源:互联网 发布:矩阵怎么计算 编辑:程序博客网 时间:2024/05/22 03:13
不错的题。这个应该从二进制角度考虑。我们知道树状数组每次就是把二进制最末尾的
那么考虑对
然后就是如何计算总贡献了:
这可以简单的数位
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MOD=1e9+7;typedef long long LL;int _test,f[70][2][2],g[70][2][2],a[70]; //f[i][0:L==R 1:L<R ][0:R==n 1:R<n ]LL n;int Solve(){ memset(f,0,sizeof(f)); memset(g,0,sizeof(g)); a[0]=0; LL _n=n; do a[++a[0]]=_n&1, _n>>=1; while(_n); g[a[0]+1][0][0]=1; for(int i=a[0]+1;i>=2;i--) for(int j1=0;j1<=1;j1++) for(int j2=0;j2<=1;j2++) if(g[i][j1][j2]){ for(int r=0;r<=(j2?1:a[i-1]);r++) for(int l=0;l<=(j1?1:r);l++){ (f[i-1][j1|(l<r)][j2|(r<a[i-1])]+=(f[i][j1][j2]+(LL)g[i][j1][j2]*(l+r-(l&&r&&!j1)*2))%MOD)%=MOD; (g[i-1][j1|(l<r)][j2|(r<a[i-1])]+=g[i][j1][j2])%=MOD; } } return (f[1][1][0]+f[1][1][1])%MOD;}int main(){ scanf("%d",&_test); while(_test--){ scanf("%lld",&n); printf("%d\n",Solve()); } return 0;}
阅读全文
0 0
- [数位DP] ZROI 2017 提高3 T1 树状数组
- [DP] ZROI 2017 提高3 T3 建筑
- SSL2833 2017年11月3日提高组T1 Alice的疑问(数位dp)
- [DP] ZROI 2017提高1 T2.给 Ca
- [DP] ZROI 2017 提高6 T2 异或统计
- [DP] ZROI 2017提高 5 T2. 石头剪刀布
- [数学杂题 位运算] ZROI 2017 提高6 T1 异或统计
- [补集转化 DP] ZROI 2017提高7 强军战歌
- SSL2831 2017年11月3日提高组T1 跃动(dp)
- [表达式求值 矩阵乘法] ZROI 2017提高10A. Calc
- hdu5125 dp+树状数组
- hdu4521 dp+树状数组
- HDU5542(dp+树状数组)
- HDU5542(dp + 树状数组)
- SSL2764 2017年10月8日提高组T1 didi(dp)
- SSL2839 2017年11月6日提高组T1 游戏(dp)
- [高维前缀和] ZROI 2017提高2 World Of Our Own
- 【NOIP 1999 提高组 T1】拦截导弹(DP)
- Ubuntu16.04 安装百度云bcloud
- python邮件SMTP的GUI编程
- bootstrap的简单实用
- sudo给某些用户添加以root权限运行某些命令
- PTA 2.3
- [数位DP] ZROI 2017 提高3 T1 树状数组
- FTPrep, 110 Balanced Binary Tree
- Quartz- Quartz API以及Jobs 和Triggers介绍
- c#实现ajax通信:向后台发送JSON字符串,接收响应字符串,并转换为对象
- 蓝桥杯 算法提高 色盲的民主
- centos基础安装
- Joda-Time 简介
- 反射机制
- java mysql 插入datetime的正确方式(MySQLSyntaxErrorException解决办法)