2020 ccpc 吉林省赛 H
2020 ccpc 吉林省赛 H
题意:
给一组数 a i a_i ai,求 ∑ i = 1 n ∑ j = 1 n [ g c d ( a i , a j ) = d ] \sum\limits_{i=1}^n\sum\limits_{j=1}^{n}[gcd(a_i,a_j)=d] i=1∑nj=1∑n[gcd(ai,aj)=d]
在赛场上我当时脑抽写了个假的算法,看似是 O ( T m l o g m ) O(Tmlogm) O(Tmlogm),但实际上是 O ( T m k ) O(Tmk) O(Tmk),只能说这道题的出题人真的没有认真出数据,没有全为1的 x的数据,结果我跑过去才发现假了,现在补个正解
首先裸的莫比乌斯反演,直接上套路秒了,我当时傻叉了换了另一种方式反演
g ( d ) = ∑ i = 1 n ∑ j = 1 n [ g c d ( a i , a j ) = d ] g(d)=\sum\limits_{i=1}^n\sum\limits_{j=1}^{n}[gcd(a_i,a_j)=d] g(d)=i=1∑nj=1∑n[gcd(ai,aj)=d]
f ( x ) = ∑ x ∣ d g ( d ) = ∑ i = 1 n ∑ j = 1 n ∑ x ∣ d [ g c d ( a i , a j ) = d ] = ∑ i = 1 n ∑ j = 1 n [ x ∣ a i 且 x ∣ a j ] f(x)=\sum_{x|d}g(d)=\sum\limits_{i=1}^n\sum\limits_{j=1}^{n}\sum_{x|d}[gcd(a_i,a_j)=d]=\sum\limits_{i=1}^n\sum\limits_{j=1}^{n}[x|ai且x|aj] f(x)=∑x∣dg(d)=i=1∑nj=1∑n∑x∣d[gcd(ai,aj)=d]=i=1∑nj=1∑n[x∣ai且x∣aj]
g ( n ) = ∑ n ∣ d m u ( d n ) f ( d ) g(n)=\sum_{n|d}mu(\frac{d}{n})f(d) g(n)=∑n∣dmu(nd)f(d)
g 和 f 都 可 以 在 一 组 中 由 于 调 和 级 数 在 O ( n l o g n ) 时 间 内 处 理 出 来 , 复 杂 度 O ( T n l o g n ) , 具 体 看 代 码 g和f都可以在一组中由于调和级数在O(nlogn)时间内处理出来,复杂度O(Tnlogn),具体看代码 g和f都可以在一组中由于调和级数在O(nlogn)时间内处理出来,复杂度O(Tnlogn),具体看代码
#include<bits/stdc++.h>using namespace std;
typedef long long ll;
const int maxn=1e5+5;
int mu[maxn],prime[maxn],t,n,m,k,a;
bool v[maxn];
ll cnt[maxn],cnt_ans[maxn],ans[maxn],tot;
void init(){ mu[1]=1;for(int i=2;i<maxn;++i){ if(!v[i])prime[++tot]=i,mu[i]=-1;for(int j=1;j<=tot&&prime[j]*i<maxn;++j){ v[i*prime[j]]=1;if(i%prime[j]==0) break;mu[i*prime[j]]=-mu[i];}}
}
int main(){ios::sync_with_stdio(false);cin.tie(0); init();cin>>t;while(t--){ cin>>n>>m>>k;for(int i=1;i<=m;++i)ans[i]=cnt_ans[i]=cnt[i]=0;for(int i=1;i<=n;++i){ cin>>a;cnt[a]++;}for(int i=1;i<=m;++i){ for(int j=i;j<=m;j+=i){ cnt_ans[i]+=cnt[j];}}for(int i=1;i<=m;++i){ for(int j=i;j<=m;j+=i){ ans[i]+=cnt_ans[j]*cnt_ans[j]*mu[j/i];}}for(int i=1;i<=k;++i){ cin>>a;cout<<ans[a]<<"\n";}}return 0;
}
2020 ccpc 吉林省赛 H相关推荐
- 2020 CCPC网络赛 赛后感
第一次参加,做过去年19年网络赛的题,去年是四个水题稳做出,然后还有两个线段树和树状数组的题(好像是),所以本来对这次网络赛挺有信心的(去年好像四个题就能进,当然要手速快). 这次网络赛还是有四个水题 ...
- 第十三届 ACM/CCPC 吉林省赛 J. Send Scores Problem
ACM/CCPC 历届真题 题解目录 Problem J. Send Scores Problem Time Limit: 1000ms Memory Limit: 512MB Description ...
- icpc 2020沈阳区域赛补题
2020沈阳区域赛 H 这题是一道典型dp 但是需要用滚动数组优化空间, 在状态转移的时候需要考虑一下是否满足天数条件. 我真的吐了,debug改了半天之后发现错误原因是: 排序应该是 sort(v+ ...
- Jumping Monkey(CCPC网络赛重赛)
Jumping Monkey(CCPC网络赛重赛) 题意: n个点的树,每个点有一个不同的值aia_iai.现在一个猴子在树上,这个猴子从点u跳到点v当且仅当ava_vav是u到v最短路径上的最大 ...
- (四面体)CCPC网络赛 HDU5839 Special Tetrahedron
1 CCPC网络赛 HDU5839 Special Tetrahedron 2 题意:n个点,选四个出来组成四面体,要符合四面体至少四条边相等,若四条边相等则剩下两条边不相邻,求个数 3 思路:枚举四 ...
- # USACO@2020铜级赛第二题
USACO@2020铜级赛第二题 题目(摘自usaco.org) Farmer John 的远房亲戚 Ben 是一个疯狂的科学家.通常这会在家庭聚会时造成不小的摩擦,但这偶尔也会带来些好处,尤其是当 ...
- i春秋2020新春公益赛WEB复现Writeup
i春秋2020新春公益赛WEB复现Writeup 说实话这个比赛打的我是一点毛病都没有,还是觉得自己掌握的东西太少了,,, 尤其是sql注入,都被大佬们玩出花来了,可能自己太菜,,,哭了!!! 关于S ...
- 2020 CCPC 绵阳站 J-Joy of Handcraft (调和级数 线段树)
2020 CCPC 绵阳站 J-Joy of Handcraft (调和级数 线段树) 之前一直对线段树有种恐惧感,感觉十分晦涩难懂,但是我还是得迎男而上!这题必须补!我说的!耶稣都留不住! 题目 h ...
- 【2020团队天梯赛模拟题L2-1】 根据输出序列判断是否是栈的输出结果(C语言)
[2020团队天梯赛模拟题L2-1] 根据输出序列判断是否是栈的输出结果(C语言) (因为找不到题目只有回忆写题了)题目描述:输出m,n,k3个整数,其中m代表栈的最大存储容量,n代表输出序列的个数, ...
最新文章
- python工厂模式 django_python设计模式-工厂方法模式
- nginx配置多个二级子域名
- 设置mysql允许外网访问
- html5 跳转参数不显示_HTML5、CSS3、ES6新特性总结
- kettle-如何在kettle中编写java代码
- Matlab代码:综合能源系统(IES)的优化调度
- 如何撰写网络营销策划方案?
- Transition过渡动画
- python代码画樱花-如何用Python代码实现樱花树效果
- 关于打麻将的高大上语言艺术
- Linux:sk_buff完全剖析与理解【转】
- 给键盘加上音效(机械键盘音效)
- Selenium基本二次封装
- 大型企业如何搭建私有云计算平台
- PyQt5基本控件之菜单栏QMenuBar
- Matlab 数值计算----二分法求非线性方程组
- 计算机恢复数据怎么恢复,电脑不小心删除的文件如何恢复?教你数据恢复方法!...
- 春暖花开--2013年度总结
- prism绘制直方图
- Android support v4、v7、v13、v14、v17和其他support库免费下载