杭电第七场
时间:2022-08-10
本文章向大家介绍杭电第七场,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
存一下代码
1006
#include<bits/stdc++.h> #define ll long long using namespace std; ll f[100][100][2]; ll mod=1000000007; //无前导0 //f[i][j][0]表示前i位0到999有j个d的方案数 //f[i][j][1]表示前i位0到123有j个d的方案数 //g[i][j][0][0]表示前i位0到999 //g[i][j][0][1]表示前i位000到999 //g[i][j][1][0]表示前i位0到123 //g[i][j][1][1]表示前i位000到123 ll read() { ll x;scanf("%lld",&x);return x; } ll quick(ll a,ll b) { ll t=1; for(;b;b>>=1,a=a*a%mod) if(b&1)t=t*a%mod; return t%mod; } ll k,B,d,now,maxi,ans; ll g[100][100][2][2]; ll ask(ll x) { ll maxi=1; if(d==1) { memset(g,0,sizeof(g)); now=x%B g[1][0][0][0]=g[1][0][0][1]=B-1; g[1][0][1][0]=g[1][0][1][1]=now; g[1][1][0][1]=g[1][1][0][0]=g[1][1][1][0]=g[1][1][1][1]=1; x=x/B; for(int i=2;x;i++,x=x/B) { maxi=i; now=x%B+1; for(int j=0;j<=i;j++) g[i][j][0][0]=(g[i-1][j][0][0]+(B-1)*g[i-1][j][0][1])%mod; g[i][0][0][1]=((B-1)*g[i-1][0][0][1])%mod; for(int j=1;j<=i;j++) g[i][j][0][1]=(g[i-1][j-1][0][1]+(B-1)*g[i-1][j][0][1])%mod; if(now==1) { for(int j=0;j<=i;j++) g[i][j][1][0]=g[i-1][j][1][0]; for(int j=1;j<=i;j++) g[i][j][1][1]=g[i-1][j-1][1][1]; } else { for(int j=0;j<=i;j++) g[i][j][1][0]=(g[i-1][j][0][0]+(now-2)*g[i-1][j][0][1]+g[i-1][j][1][1] )%mod; g[i][0][1][1]=((now-2)*g[i-1][0][0][1]+g[i-1][0][1][1])%mod; for(int j=1;j<=i;j++) g[i][j][1][1]=(g[i-1][j-1][0][1]+(now-2)*g[i-1][j][0][1]+g[i-1][j][1][1])%mod; } } ans=0; for(int i=1;i<=64;i++) ans=(ans+g[maxi][i][1][0]*quick(i,k)%mod)%mod; return ans; } memset(f,0,sizeof(f)); maxi=1; f[1][0][0]=B-1; f[1][1][0]=1; now=x%B+1; if(now>=d) f[1][0][1]=now-1,f[1][1][1]=1; else f[1][0][1]=now,f[1][1][1]=0; x=x/B; for(int i=2;x;i++,x=x/B) { maxi=i; now=x%B+1; f[i][0][0]=f[i-1][0][0]*(B-1)%mod; for(int j=1;j<=i;j++) f[i][j][0]=(f[i-1][j][0]*(B-1)%mod+f[i-1][j-1][0])%mod; if(now>d) { f[i][0][1]=(f[i-1][0][0]*(now-2)%mod+f[i-1][0][1])%mod; for(int j=1;j<=i;j++) f[i][j][1]=(f[i-1][j][0]*(now-2)%mod+f[i-1][j-1][0]+f[i-1][j][1])%mod; //1带上限 } else if(now==d) { f[i][0][1]=f[i-1][0][0]*(now-1)%mod; for(int j=1;j<=i;j++) f[i][j][1]=(f[i-1][j][0]*(now-1)%mod+f[i-1][j-1][1])%mod; //1带上限 } else { for(int j=0;j<=i;j++) f[i][j][1]=(f[i-1][j][0]*(now-1)%mod+f[i-1][j][1])%mod; } } ans=0; for(int i=1;i<=maxi;i++) ans=(ans+f[maxi][i][1]*quick(i,k)%mod)%mod; return ans; } void work() { ll l,r; k=read();B=read();d=read();l=read();r=read(); d++; printf("%lld\n",(ask(r)-ask(l-1)+mod)%mod); } int main() { freopen("1006.in","r",stdin); for(int t=read();t;t--) work(); }
原文地址:https://www.cnblogs.com/qywyt/p/16573566.html
- JS原型继承和类式继承
- 在Servlet的init方法中创建线程
- TensorFlow从0到1丨第2篇:TensorFlow核心编程
- AngularJS中的按需加载ocLazyLoad
- AngularJS driective 封装 自动滚动插件
- java类过滤器,防止页面SQL注入
- Web项目添加Maven支持
- Jquery 获取第一个子元素
- Dropwizard框架入门
- Java 解析Excel文件为JSON
- SQL语句大小写是否区分的问题,批量修改整个数据库所有表所有字段大小写
- CentOS 6.5 安装nginx 1.6.3
- C#创建数字证书并导出为pfx,并使用pfx进行非对称加解密
- MyBatis两张表字段名相同产生的问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法