当你看到一个东西的时候,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口胡的更多相关文章

  1. Topcoder口胡记 SRM 562 Div 1 ~ SRM 599 Div 1

    据说做TC题有助于提高知识水平? :) 传送门:https://284914869.github.io/AEoj/index.html 转载请注明链接:http://www.cnblogs.com/B ...

  2. 口胡FFT现场(没准就听懂了)&&FFT学习笔记

    前言(不想听的可以跳到下面) OK.蒟蒻又来口胡了. 自从ZJOI2019上Day的数论课上的多项式听到懵逼了,所以我就下定决心要学好多项式.感觉自己以前学的多项式都是假的. 但是一直在咕咕,现在是中 ...

  3. BZOJ 口胡记录

    最近实在是懒的不想打代码...好像口胡也算一种训练,那就口胡把. BZOJ 2243 染色(树链剖分) 首先树链剖分,然后记录下每个区间的左右端点颜色和当前区间的颜色段.再对每个节点维护一个tag标记 ...

  4. Atcoder/Topcoder 口胡记录

    Atcoder/Topcoder 理论 AC Atcoder的❌游戏示范 兴致勃勃地打开一场 AGC 看 A 题,先 WA 一发,然后花了一年时间 Fix. 看 B 题,啥玩意?这能求? 睡觉觉. e ...

  5. NOIP2016考前做题(口胡)记录

    NOIP以前可能会持续更新 写在前面 NOIP好像马上就要到了,感觉在校内训练里面经常被虐有一种要滚粗的感觉(雾.不管是普及组还是提高组,我都参加了好几年了,结果一个省一都没有,今年如果还没有的话感觉 ...

  6. 关于有向图走“无限次”后求概率/期望的口胡/【题解】HNCPC2019H 有向图

    关于有向图走"无限次"后求概率/期望的口胡/[题解]HNCPC2019H 有向图 全是口胡 假了不管 讨论的都是图\(G=(V,E),|V|=n,|E|=m\)上的情况 " ...

  7. 「口胡题解」「CF965D」Single-use Stones

    目录 题目 口胡题解 题目 有许多的青蛙要过河,可惜的是,青蛙根本跳不过河,他们最远只能跳 \(L\) 单位长度,而河宽 \(W\) 单位长度. 在河面上有一些石头,距离 \(i\) 远的地方有 \( ...

  8. PKUSC 2022 口胡题解

    \(PKUSC\ 2022\)口胡题解 为了更好的在考试中拿分,我准备学习基础日麻知识(为什么每年都考麻将 啊啊啊) 首先\(STO\)吉老师\(ORZ,\)真的学到了好多 观察标签发现,这套题覆盖知 ...

  9. 「线性基」学习笔记and乱口胡总结

    还以为是什么非常高大上的东西花了1h不到就学好了 线性基 线性基可以在\(O(nlogx)\)的时间内计算出\(n\)个数的最大异或和(不需要相邻). 上述中\(x\)表示的最大的数. 如何实现 定义 ...

随机推荐

  1. FileInputStream 类与 FileReader 类的区别

    FileInputStream 类与 FileReader 类的区别: 两个类的构造函数的形式和参数都是相同的,参数为 File 对象或者表示路径的 String ,它们到底有何区别呢? FileIn ...

  2. Shell条件练习题

    Shell条件练习题 目录 Shell条件练习题 1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限 2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的 ...

  3. 对于Web性能优化, 了解和经验

    我们在发布项目之前压缩CSS和JavaScript源代码,这样文件体积就变小了,用户加载必要资源所花的时间也就更短了. 压缩源码和图片 JavaScript文件源代码可以采用混淆压缩的方式,CSS文件 ...

  4. Ubuntu 16.04 更改系统语言为简体中文 #####避坑指南

    大家跟着我的步骤一步一步来,肯定不会出现问题的 我这里说明两点,一是切换到管理员用户,二是更新网络源! 且待大家走一遍安装流程 一.安装时报错 原因:以访客的身份进入的会报错,改为管理员进入即可. p ...

  5. js实现用按钮控制网页滚动、以及固定导航栏效果

    实现效果如下: 页面内有三个按钮,分别控制页面向上.向下移动,以及暂停,并设置有导航栏,在滚动到某一位置时显示.且当用户主动控制鼠标滑轮时,滚动效果自动关闭.本页面只是演示如何实现,进行了简单的布局, ...

  6. 编译安装http2.4

    编译安装http2.4 1.安装相关依赖包 [root@centos7 ~]yum -y install gcc make 2.下载http2.4包,并解压 [root@centos7 ~]#tar ...

  7. linux_15

    实现基于MYSQL验证的vsftpd虚拟用户访问 配置samba共享,实现/www目录共享 使用rsync+inotify实现/www目录实时同步 LVS调度算法总结 LVS的跨网络DR实现

  8. 05.python语法入门--垃圾回收机制

    # (1)垃圾回收机制GC# 引用计数# x = 10 # 值10引用计数为1# y = x   # 值10引用计数为2## y = 1000 # 值10引用计数减少为1# del x     # 值 ...

  9. Linux基础:初识shell之系统命令基础

    一 shell介绍 shell Shell 中文意思贝壳,寓意类似内核的壳.Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务,简而言之就是只要能够操作应用 ...

  10. Solution -「LOCAL」「cov. HDU 6864」找朋友

    \(\mathcal{Description}\)   Link.(几乎一致)   给定 \(n\) 个点 \(m\) 条边的仙人掌和起点 \(s\),边长度均为 \(1\).令 \(d(u)\) 表 ...