[ Lucas定理 数位DP 容斥 ] 「2015 计蒜之道 复赛」360的产品试用体验
来源:互联网 发布:mac怎么建立文件夹 编辑:程序博客网 时间:2024/06/06 11:40
题解
#include<bits/stdc++.h>using namespace std;const int M=47;typedef long long ll;int k,T,m,p[3];int f[20][3][8][150];ll a[5],l[5],r[5],n;int A[3][20],B[20];int w[20],cnt,Ans;int mx[3][20];int c[M][M];inline void Add(int& x,int y){ x=(x+y)%M;}inline int Calc(ll x,ll y,ll z){ int aa[20]; memset(mx,0,sizeof(mx)); for(int i=0;i<3;i++){ ll t; if(!i)t=x;else t=i==1?y:z; memset(aa,0,sizeof(aa)); int L=0; while(t)aa[++L]=t%M,t/=M; for(int j=1;j<=cnt;j++)mx[i][j]=aa[cnt-j+1]; } memset(f,0,sizeof(f)); f[0][2][7][0]=1; for(int i=0;i<=cnt;i++) for(int j=0;j<(i==cnt?2:3);j++) for(int P=0;P<8;P++) for(int r=0;r<=M*3;r++) if(f[i][j][P][r]){ int t=f[i][j][P][r]; p[0]=(P&1),p[1]=((P>>1)&1),p[2]=((P>>2)&1); if(j==2){ int nxi=i+1,nxj=0; if(p[nxj])m=mx[nxj][nxi];else m=M-1; for(int k=0;k<=m;k++){ int T=r*47+w[nxi]-k; if(T<0)break; Add(f[nxi][nxj][P-(p[nxj]&&k<m?(1<<nxj):0)][min(M*3,T)],t*c[A[nxj][nxi]][k]); } }else{ int nxi=i,nxj=j+1; if(p[nxj])m=mx[nxj][nxi];else m=M-1; for(int k=0;k<=m;k++){ int T=r-k; if(T<0)break; Add(f[nxi][nxj][P-(p[nxj]&&k<m?(1<<nxj):0)][T],t*c[A[nxj][nxi]][k]); } } } int Ans=0; for(int P=0;P<8;P++) for(int r=0;r<=M*3;r++){ Add(Ans,f[cnt][2][P][r]); } return Ans;}inline void Init(){ for(int i=0;i<M;i++)c[i][0]=1; for(int i=1;i<M;i++) for(int j=1;j<M;j++) c[i][j]=(c[i-1][j]+c[i-1][j-1])%M;}int main(){ scanf("%d",&T); Init(); while(T--){ for(int i=0;i<3;i++)scanf("%lld%lld%lld",&a[i],&l[i],&r[i]); scanf("%lld",&n); Ans=cnt=0; while(n)w[++cnt]=n%M,n/=M; for(int i=1;i<=(cnt-1>>1);i++)swap(w[i],w[cnt-i+1]); for(int i=0;i<3;i++){ memset(B,0,sizeof(B)); int t=0; while(a[i])B[++t]=a[i]%M,a[i]/=M; for(int j=1;j<=cnt;j++)A[i][j]=B[cnt-j+1]; } Add(Ans,Calc(r[0],r[1],r[2])); Add(Ans,-Calc(l[0]-1,r[1],r[2])); Add(Ans,-Calc(r[0],l[1]-1,r[2])); Add(Ans,-Calc(r[0],r[1],l[2]-1)); Add(Ans,Calc(l[0]-1,l[1]-1,r[2])); Add(Ans,Calc(r[0],l[1]-1,l[2]-1)); Add(Ans,Calc(l[0]-1,r[1],l[2]-1)); Add(Ans,-Calc(l[0]-1,l[1]-1,l[2]-1)); printf("%d\n",(Ans+M)%M); } return 0;}
阅读全文
0 0
- [ Lucas定理 数位DP 容斥 ] 「2015 计蒜之道 复赛」360的产品试用体验
- [Lucas定理 数位DP 容斥原理] 2015 计蒜之道 复赛 360的产品试用体验
- [Lucas+数位DP] 2015 计蒜之道 复赛 C. 360的产品试用体验
- [数位DP Lucas定理] 2017 计蒜之道 复赛 E. 商汤智能机器人
- [lucas+数位DP] 2017 计蒜之道 复赛 E. 商汤智能机器人
- 【计蒜客】「2017 计蒜之道 复赛」A.阿里云秘钥池 数位DP+莫比乌斯函数
- [数位DP 莫比乌斯反演] 2017 计蒜之道 复赛 A. 阿里云秘钥池
- 【莫比乌斯反演+数位DP】2017 计蒜之道 复赛 A.阿里云秘钥池
- HDU_5794_ASimpleChess(Lucas定理&&(容斥||dp))
- 【数位DP+莫比乌斯函数】2017计蒜之道复赛A[阿里云秘钥池]题解
- 2017 计蒜之道 复赛 <状压DP+最短路>
- hdu5794 lucas定理+容斥
- 2016 计蒜之道 复赛 A
- 2017计蒜之道 复赛 BDF
- 2017 计蒜之道 复赛 题解
- [容斥系数 记录状态DP] 2016 计蒜之道 初赛 第四场 遗失的支付宝密码
- 2017 计蒜之道 复赛 腾讯消消乐【状压dp】
- 计蒜之道-2017复赛-腾讯消消乐(状压DP)
- Android开发_1.布局
- linux 安装mysql
- Git clone指定分支
- 在tomcat里面,怎么修改jsp都没有变化
- 论文笔记之目标检测(2)-- GRP-DSOD
- [ Lucas定理 数位DP 容斥 ] 「2015 计蒜之道 复赛」360的产品试用体验
- android、ios、php之间AES加密解密
- java的hashMap的resize()
- Centos 7由于下载软件包信息失败,软件包选择被禁止
- Elasticsearch学习笔记
- 浅谈MySQL集群高可用架构
- 在Visual Code中启用virtualenv
- 12.10中兴通讯科技园研发大楼发生42岁工程师跳楼事件
- 百度面试200题