[WC2014]时空穿梭(莫比乌斯反演)
https://www.cnblogs.com/CQzhangyu/p/7891363.html
不难推到$\sum\limits_{D=1}^{m_1}\sum\limits_{d|D}C_{d-1}^{c-2}\mu(\frac D d)\prod\limits_{i=1}^n\frac {(2m_i-({\lfloor \frac {m_i} {D} \rfloor}+1)\times D){\lfloor \frac {m_i} {D} \rfloor}}{2}$。
$O(Tnm)$,可以拿80甚至100。
我们发现,求和部分与累积部分都含有D,这使分块加速变得困难。
化一下式子发现,当将$\lfloor\frac{m}{D}\rfloor$看作常数时,右边可以化成一个n次多项式。
$O(cm\log m+nmc)$预处理出多项式系数,$O(n\sqrt{m})$整除分块,$O(n^2)$暴力求多项式系数即可。
常数过大BZ被卡。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
using namespace std; const int N=,M=,mod=,inv2=;
bool b[N];
int T,c,n,tot,mn,ans,m[],p[N],mu[N],C[N][],s[N][][],sj[N][],f[],g[N][]; int main(){
freopen("space.in","r",stdin);
freopen("space.out","w",stdout);
mu[]=;
rep(i,,M){
if (!b[i]) p[++tot]=i,mu[i]=-;
for (int j=; j<=tot && i*p[j]<=M; j++){
b[i*p[j]]=;
if (i%p[j]==) break;
mu[i*p[j]]=-mu[i];
}
}
rep(i,,M){
C[i][]=;
rep(j,,min(i,)) C[i][j]=(C[i-][j-]+C[i-][j])%mod;
}
rep(i,,M){
int tmp=;
rep(k,,) sj[i][k]=tmp,tmp=1ll*tmp*i%mod;
}
rep(j,,) rep(i,,M) if (mu[i])
for (int k=i; k<=M; k+=i) g[k][j]=(g[k][j]+1ll*mu[i]*C[k/i-][j]%mod+mod)%mod;
rep(i,,M) rep(j,,) rep(k,,) s[i][j][k]=(s[i-][j][k]+1ll*g[i][j]*sj[i][k])%mod;
for (scanf("%d",&T); T--; ){
scanf("%d%d",&n,&c); mn=N; ans=;
rep(i,,n) scanf("%d",&m[i]),mn=min(mn,m[i]);
for (int i=,lst; i<=mn; i=lst+){
lst=mn; rep(j,,n) lst=min(lst,m[j]/(m[j]/i));
int tmp=; rep(j,,n) tmp=1ll*tmp*(m[j]/i)%mod*inv2%mod;
memset(f,,sizeof(f)); f[]=;
rep(j,,n) for (int k=j; ~k; k--) f[k]=(2ll*f[k]*m[j]%mod-1ll*f[k-]*(m[j]/i+)%mod+mod)%mod;
rep(j,,n) ans=(ans+1ll*tmp*f[j]%mod*(s[lst][c-][j]-s[i-][c-][j]+mod)%mod)%mod;
}
printf("%d\n",ans);
}
return ;
}
[WC2014]时空穿梭(莫比乌斯反演)的更多相关文章
- 【BZOJ3434】[Wc2014]时空穿梭 莫比乌斯反演
[BZOJ3434][Wc2014]时空穿梭 Description Input 第一行包含一个正整数T,表示有T组数据求解每组数据包含两行,第一行包含两个正整数N,C(c>=2),分别表示空间 ...
- BZOJ 3434 [WC2014]时空穿梭 (莫比乌斯反演)
题面:BZOJ传送门 洛谷传送门 好难啊..反演的终极题目 首先,本题的突破口在于直线的性质.不论是几维的空间,两点一定能确定一条直线 选取两个点作为最左下和最右上的点! 假设现在是二维空间,选取了$ ...
- UOJ 54 【WC2014】时空穿梭——莫比乌斯反演
题目:http://uoj.ac/problem/54 想写20分. Subtask 2 就是枚举4个维度的值的比例,可算对于一个比例有多少个值可以选,然后就是组合数.结果好像不对. 因为模数太小,组 ...
- UOJ#54 BZOJ3434 [WC2014]时空穿梭
题目描述 小 X 驾驶着他的飞船准备穿梭过一个 \(n\) 维空间,这个空间里每个点的坐标可以用 \(n\) 个实数表示,即 \((x_1,x_2,\dots,x_n)\). 为了穿过这个空间,小 X ...
- BZOJ3434 [Wc2014]时空穿梭
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- [WC2014]时空穿梭
这才叫莫比乌斯反演题. 一.题目 点此看题 二.解法 也没有什么好的思路,我们不妨把暴力柿子写出来,我们想枚举直线,但是这道题不能枚举直线的斜率,所以就要用整数来表示直线,我们不妨枚举出发点和终止点的 ...
- BZOJ3434 WC2014时空穿梭(莫比乌斯反演)
考虑枚举相邻点距离差的比例.显然应使比例值gcd为1以保证不重复统计.确定比例之后,各维坐标的方案数就可以分开考虑.设比例之和为k,则若坐标上限为m,该维坐标取值方案数即为Σm-ki (i=1~⌊m/ ...
- 【BZOJ】3434: [Wc2014]时空穿梭
http://www.lydsy.com/JudgeOnline/problem.php?id=3434 题意:n维坐标中要找c个点使得c个点在一条线上且每一维的坐标单调递增且不能超过每一维限定的值m ...
- 莫比乌斯反演题表II
bzoj3994:[SDOI2015]约数个数和 **很好推+有个小结论bzoj3309:DZY Loves Math ***很好推+线筛某函数/卡常bzoj4816:[Sdoi2017]数字表格 * ...
随机推荐
- 【译】第七篇 Replication:合并复制-订阅
本篇文章是SQL Server Replication系列的第七篇,详细内容请参考原文. 订阅服务器就是复制发布项目的所有变更将传送到的服务器.每一个发布需要至少一个订阅,但是一个发布可以有多个订阅. ...
- transparent 透明效果
background-color:transparent;就是把背景色设置为透明. 实际上background默认的颜色就是透明的属性.所以写和不写都是一样的 span{ width: 0; heig ...
- MyBatis 总结记录
1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的JDBC代码.手工设置参数和结果集重获.MyBatis 只使用简单的XM ...
- C#基础学习之StreamReader和StreamWriter
StreamReader和StreamWriter操作字符的 FileStream操作字节的 //使用StreamReader读取文件 using (StreamReader sr=new Strea ...
- TF-搞不懂的TF矩阵加法
看谷歌的demo mnist,卷积后加偏执量的代码 h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)h_pool1 = max_pool ...
- 洛谷P1195口袋的天空
传送门啦 一个裸的最小生成树,输出 $ No Answer $ 的情况只有 $ k < n $ 的时候. 开始令 $ num =n $ ,如果 $ num = k $ ,直接输出 $ 0 $ , ...
- WordPress引入css/js两种方法
WordPress引入css/js 是我们制作主题时首先面对的一个难点,任何一款主题都要加载自己的css,js,甚至很有可能还需要加载Jquery文件,网上方法特多,说法不一,我们今天借鉴wordpr ...
- hdu 1398 整数划分变形 (母函数)
有1,4,9,16,25.....2^17这么多面值的硬币,问任意给定一个不大于300的正整数面额,用这些硬币来组成此面额总共有多少种组合种数 比如10全14 + 6个 14+4+1+19+1 求(1 ...
- mysql千万级表关联优化(2)
概述: 交代一下背景,这算是一次项目经验吧,属于公司一个已上线平台的功能,这算是离职人员挖下的坑,随着数据越来越多,原本的SQL查询变得越来越慢,用户体验特别差,因此SQL优化任务交到了我手上. 这个 ...
- day7 socket网络编程
Python Socket网络编程 Socket是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于Socket来完成通信的 ...