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\)表示的最大的数. 如何实现 定义 ...
随机推荐
- FileInputStream 类与 FileReader 类的区别
FileInputStream 类与 FileReader 类的区别: 两个类的构造函数的形式和参数都是相同的,参数为 File 对象或者表示路径的 String ,它们到底有何区别呢? FileIn ...
- Shell条件练习题
Shell条件练习题 目录 Shell条件练习题 1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限 2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的 ...
- 对于Web性能优化, 了解和经验
我们在发布项目之前压缩CSS和JavaScript源代码,这样文件体积就变小了,用户加载必要资源所花的时间也就更短了. 压缩源码和图片 JavaScript文件源代码可以采用混淆压缩的方式,CSS文件 ...
- Ubuntu 16.04 更改系统语言为简体中文 #####避坑指南
大家跟着我的步骤一步一步来,肯定不会出现问题的 我这里说明两点,一是切换到管理员用户,二是更新网络源! 且待大家走一遍安装流程 一.安装时报错 原因:以访客的身份进入的会报错,改为管理员进入即可. p ...
- js实现用按钮控制网页滚动、以及固定导航栏效果
实现效果如下: 页面内有三个按钮,分别控制页面向上.向下移动,以及暂停,并设置有导航栏,在滚动到某一位置时显示.且当用户主动控制鼠标滑轮时,滚动效果自动关闭.本页面只是演示如何实现,进行了简单的布局, ...
- 编译安装http2.4
编译安装http2.4 1.安装相关依赖包 [root@centos7 ~]yum -y install gcc make 2.下载http2.4包,并解压 [root@centos7 ~]#tar ...
- linux_15
实现基于MYSQL验证的vsftpd虚拟用户访问 配置samba共享,实现/www目录共享 使用rsync+inotify实现/www目录实时同步 LVS调度算法总结 LVS的跨网络DR实现
- 05.python语法入门--垃圾回收机制
# (1)垃圾回收机制GC# 引用计数# x = 10 # 值10引用计数为1# y = x # 值10引用计数为2## y = 1000 # 值10引用计数减少为1# del x # 值 ...
- Linux基础:初识shell之系统命令基础
一 shell介绍 shell Shell 中文意思贝壳,寓意类似内核的壳.Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务,简而言之就是只要能够操作应用 ...
- Solution -「LOCAL」「cov. HDU 6864」找朋友
\(\mathcal{Description}\) Link.(几乎一致) 给定 \(n\) 个点 \(m\) 条边的仙人掌和起点 \(s\),边长度均为 \(1\).令 \(d(u)\) 表 ...