LGP3281口胡
当你看到一个东西的时候,GF 有可能比 DP 更方便。处理贡献也有可能比 DP 更方便。
这个题意明显是让我们计算 \(S(r)-S(l-1)\) 之类的东西(
所以直接考虑前缀的答案就好了(
考虑将一个数分为两个部分,顶着最高位的前缀和没顶着最高位的后缀。
我们枚举这个前缀。后缀的个数是很容易计算的,前缀对答案的贡献也很容易计算。
后缀对答案的贡献不是那么好计算。我们直接考虑每个元素对答案的贡献。
设所有长度为 \(n\) 的数的前缀和之和为 \(g[n]\),所有长度为 \(n\) 的数的价值为 \(f[n]\)。
对于 \(g\),似乎很好算,有 \(g[n]=\frac{B(B-1)}{2}\times\sum_{i=1}^{n}(\sum_{j=0}^{n-i}B^{j})\times B^{n-1}=\frac{B^{n}(B-1)}{2}\times\sum_{i=1}^{n}(\sum_{j=0}^{n-i}B^{j})\)。
似乎 \(f\) 和 \(g\) 差不了多少,是 \(f[n]=\frac{B(B-1)}{2}\times\sum_{i=1}^{n}i\times(\sum_{j=0}^{n-i}B^{j})\times B^{n-1}=\frac{B^{n}(B-1)}{2}\times\sum_{i=1}^{n}i\times(\sum_{j=0}^{n-i}B^{j})\)。
但是有的数被枚举时包含了前导 \(0\)。
我们直接去掉包含前导 \(0\) 的原有的数的贡献,然后加上应有的贡献就行了。
注意需要再枚举一位非 \(0\)。
#include<cstdio>
typedef unsigned ui;
const ui M=1e5+5,mod=20130427,inv2=10065214;
ui B,f[M],g[M],t[M],pw[M];
ui n,m,a[M],b[M];
inline void init(const ui&n){
t[0]=1;pw[0]=1;
for(ui i=1;i<=n;++i){
pw[i]=1ull*pw[i-1]*B%mod;t[i]=(t[i-1]+pw[i])%mod;
}
for(ui i=1;i<=n;++i){
g[i]=(g[i-1]+t[i-1])%mod;f[i]=(f[i-1]+1ull*(i-1)*t[i-1])%mod;
}
for(ui S(0),i=1;i<=n;++i){
S=(S+t[i-1])%mod;f[i]=(1ull*i*S+mod-f[i])%mod;
}
for(ui i=1;i<=n;++i){
f[i]=1ull*pw[i]*(B-1)%mod*inv2%mod*f[i]%mod;g[i]=1ull*pw[i]*(B-1)%mod*inv2%mod*g[i]%mod;
}
for(ui i=0;i<=n;++i){
if(!t[i])t[i]=mod;if(!pw[i])pw[i]=mod;if(!f[i])f[i]=mod;if(!g[i])g[i]=mod;
}
}
inline ui F(ui*a,const ui&n){
ui ans(0);
for(ui i=1;i<=n;++i)ans=(ans+1ull*a[i]*i%mod*t[n-i])%mod;
return ans;
}
inline ui Solve(ui*a,const ui&n){
ui ans(0);
for(ui F(0),G(0),i=1;i<=n;++i){
// for(ui c=0;c<a[i];++c){
// const ui&tg=(1ull*G*B+1ull*i*c)%mod,&tf=(F+tg)%mod;
//// ans=(ans+1ull*g[n-i]*i+1ull*tg*(t[n-i]-1)%mod*pw[n-i]+1ull*tf*pw[n-i]+f[n-i])%mod;
// }
const ui&m=a[i],&sg=(1ull*G*B%mod*m+1ull*m*(m-1)%mod*inv2%mod*i)%mod,&sf=(1ull*F*m+sg)%mod;
ans=(ans+1ull*g[n-i]*i%mod*m+1ull*sg*(t[n-i]-1)%mod*pw[n-i]+1ull*sf*pw[n-i]+1ull*f[n-i]*m)%mod;
if(i!=n){
// for(ui c=1;c<B;++c){
// const ui&tg=1ull*(i+1)*c%mod,&tf=tg;
// ans=(ans+mod-(1ull*g[n-i-1]*(i+1)+1ull*tg*(t[n-i-1]-1)%mod*pw[n-i-1]+1ull*tf*pw[n-i-1]+f[n-i-1])%mod)%mod;
// ans=(ans+g[n-i-1]+1ull*c*(t[n-i-1]-1)%mod*pw[n-i-1]+1ull*c*pw[n-i-1]+f[n-i-1])%mod;
// }
const ui&m=B-1,&c=1ull*B*(B-1)%mod*inv2%mod,&sg=1ull*(i+1)*c%mod,&sf=sg;
ans=(ans+mod-(1ull*g[n-i-1]*(i+1)%mod*m+1ull*sg*(t[n-i-1]-1)%mod*pw[n-i-1]+1ull*sf*pw[n-i-1]+1ull*f[n-i-1]*m)%mod)%mod;
ans=(ans+1ull*g[n-i-1]*m+1ull*c*(t[n-i-1]-1)%mod*pw[n-i-1]+1ull*c*pw[n-i-1]+1ull*f[n-i-1]*m)%mod;
}
G=(1ull*G*B+1ull*i*a[i])%mod;F=(F+G)%mod;
}
return ans;
}
signed main(){
scanf("%u",&B);
scanf("%u",&n);for(ui i=1;i<=n;++i)scanf("%u",a+i);
scanf("%u",&m);for(ui i=1;i<=m;++i)scanf("%u",b+i);
init(n>m?n:m);printf("%u",(Solve(b,m)+mod-Solve(a,n)+F(b,m))%mod);
}
LGP3281口胡的更多相关文章
- Topcoder口胡记 SRM 562 Div 1 ~ SRM 599 Div 1
据说做TC题有助于提高知识水平? :) 传送门:https://284914869.github.io/AEoj/index.html 转载请注明链接:http://www.cnblogs.com/B ...
- 口胡FFT现场(没准就听懂了)&&FFT学习笔记
前言(不想听的可以跳到下面) OK.蒟蒻又来口胡了. 自从ZJOI2019上Day的数论课上的多项式听到懵逼了,所以我就下定决心要学好多项式.感觉自己以前学的多项式都是假的. 但是一直在咕咕,现在是中 ...
- BZOJ 口胡记录
最近实在是懒的不想打代码...好像口胡也算一种训练,那就口胡把. BZOJ 2243 染色(树链剖分) 首先树链剖分,然后记录下每个区间的左右端点颜色和当前区间的颜色段.再对每个节点维护一个tag标记 ...
- Atcoder/Topcoder 口胡记录
Atcoder/Topcoder 理论 AC Atcoder的❌游戏示范 兴致勃勃地打开一场 AGC 看 A 题,先 WA 一发,然后花了一年时间 Fix. 看 B 题,啥玩意?这能求? 睡觉觉. e ...
- NOIP2016考前做题(口胡)记录
NOIP以前可能会持续更新 写在前面 NOIP好像马上就要到了,感觉在校内训练里面经常被虐有一种要滚粗的感觉(雾.不管是普及组还是提高组,我都参加了好几年了,结果一个省一都没有,今年如果还没有的话感觉 ...
- 关于有向图走“无限次”后求概率/期望的口胡/【题解】HNCPC2019H 有向图
关于有向图走"无限次"后求概率/期望的口胡/[题解]HNCPC2019H 有向图 全是口胡 假了不管 讨论的都是图\(G=(V,E),|V|=n,|E|=m\)上的情况 " ...
- 「口胡题解」「CF965D」Single-use Stones
目录 题目 口胡题解 题目 有许多的青蛙要过河,可惜的是,青蛙根本跳不过河,他们最远只能跳 \(L\) 单位长度,而河宽 \(W\) 单位长度. 在河面上有一些石头,距离 \(i\) 远的地方有 \( ...
- PKUSC 2022 口胡题解
\(PKUSC\ 2022\)口胡题解 为了更好的在考试中拿分,我准备学习基础日麻知识(为什么每年都考麻将 啊啊啊) 首先\(STO\)吉老师\(ORZ,\)真的学到了好多 观察标签发现,这套题覆盖知 ...
- 「线性基」学习笔记and乱口胡总结
还以为是什么非常高大上的东西花了1h不到就学好了 线性基 线性基可以在\(O(nlogx)\)的时间内计算出\(n\)个数的最大异或和(不需要相邻). 上述中\(x\)表示的最大的数. 如何实现 定义 ...
随机推荐
- android怎么做表格显示数据
实现思路:最底层(父级)背景为黑色,最上层(子级)背景为白色,然后父子组件之间存在一丝间隔即可显示出类似边框的线. 本次主要利用Android中的TableRow等实现,其他类比也可以实现效果. &l ...
- 匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型
1. 这里所说的"匿名内部类"主要是指在其外部类的成员方法内定义,同时完成实例化的类,若其访问该成员方法中的局部变量,局部变量必须要被final修饰.2. 原因是编译程序实现上的困 ...
- Mac搭建Git服务器—开启SSH
SSH开启 在osx中开启ssh访问非常简单,只需要打开"系统偏好设置"并且点击"共享"图标即可. 选中下图中的check box即允许远程登陆.server处 ...
- nodejs的安装及创建项目
安装windows nodejs教程:1.官网下载windows安装:2.CMD中输入:npm -g install koa -generator 创建项目:1.首先新建文件夹2.CMD中输入CD 文 ...
- abp vnext 调试
在用Abp或者asp.net core 开发过程中,难免会遇到稀奇古怪的问题,需要对底层源代码进行调试,下面就教大家如何通过配置Visual Studio 2019来进行调试: 首先我们通过查看Abp ...
- PHP面试常考内容之面向对象(2)
PHP面试专栏正式起更,每周一.三.五更新,提供最好最优质的PHP面试内容.继上一篇"PHP面试常考内容之面向对象(1)"发表后,今天更新(2),需要(1)的可以直接点击文字进行跳 ...
- Memory Management in Rust
程序在运行时需要请求操作系统分配内存以及释放内存,因此,程序员在编写程序时,需要显式(手动)地编写分配和释放内存的代码,或者隐式(自动,由语言保证)地进行内存管理.对于前者,C/C++ 是代表语言,程 ...
- pytest(10)-常用执行参数说明
pytest单元测试框架中可以使用命令行及代码pytest.main()两种方式执行测试,且可以加入各种参数来组织执行测试.接下来我们来了解常用的执行参数的含义及其用法. pytest中的执行参数根据 ...
- Linux CentOS 搭建SVN并用钩子自动实现同步到Web目录
linux安装配置SVN并设置钩子 安装说明 系统环境:CentOS-6.3安装方式:yum install (源码安装容易产生版本兼容的问题)安装软件:系统自动下载SVN软件 检查已安装版本 # ...
- Docker 镜像 层结构理解
镜像到底是什么.镜像的层结构又是什么 通过docker history命令进行分析,镜像是一种其他镜像+文件+命令的组合. 这些镜像的加载.文件导入创建.命令是存在顺序关系的,所以也引出了层的概念. ...