题面

为了好写式子,先不管$a$的限制

设$facs$为因子和,那么有

$ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^mfacs(gcd(i,j))$

再设$f(k)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m[gcd(i,j)==k]$

熟悉的东西,再写一遍=。=

$f(k)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m[gcd(i,j)==k]$

$=\sum\limits_{i=1}^{min(\left\lfloor\frac{n}{k}\right\rfloor,\left\lfloor\frac{m}{k}\right\rfloor)}μ(i)\left\lfloor\frac{n}{ik}\right\rfloor\left\lfloor\frac{m}{ik}\right\rfloor$

$\sum\limits_{i=1}^{min(n,m)}[k|i]μ(\frac{i}{k})\left\lfloor\frac{n}{i}\right\rfloor\left\lfloor\frac{m}{i}\right\rfloor$

那么

$ans=\sum\limits_{i=1}^{min(n,m)}facs(i)f(i)$

$=\sum\limits_{i=1}^{min(n,m)}facs(i)\sum_{d|i}μ(\frac{i}{d})\left\lfloor\frac{n}{i}\right\rfloor\left\lfloor\frac{m}{i}\right\rfloor$

$=\sum\limits_{i=1}^{min(n,m)}\left\lfloor\frac{n}{i}\right\rfloor\left\lfloor\frac{m}{i}\right\rfloor\sum_{d|i}facs(d)μ(\frac{i}{d})$

预处理后面的那个东西,前面的每次$O(\sqrt n)$回答

等等还有$a$的限制

先读进来按$a$排序,然后依次插入后面那个函数值,也就是单点修改+区间查询,树状数组解决

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=1e5,Mod=;
struct a
{
int n,m,a;
int idx,ans;
}qry[N];
struct b
{
int f,idx;
}sum[N];
int npr[N],pri[N],mul[N],bit[N],T,p,cnt;
bool cmp(a x,a y)
{
return x.a<y.a;
}
bool com(b x,b y)
{
return x.f<y.f;
}
bool cpr(a x,a y)
{
return x.idx<y.idx;
}
void Add(int pos,int tsk)
{
while(pos<=M)
bit[pos]+=tsk,pos+=pos&-pos;
}
int Query(int pos)
{
int ret=;
while(pos)
ret+=bit[pos],pos-=pos&-pos;
return ret;
}
void Prework()
{
npr[]=true,mul[]=,p=;
for(int i=;i<=M;i++)
{
if(!npr[i]) pri[++cnt]=i,mul[i]=-;
for(int j=;j<=cnt&&i*pri[j]<=M;j++)
{
npr[i*pri[j]]=true;
if(i%pri[j]==) break;
else mul[i*pri[j]]=-mul[i];
}
}
for(int i=;i<=M;i++) sum[i].idx=i;
for(int i=;i<=M;i++)
for(int j=i;j<=M;j+=i) sum[j].f+=i;
}
int Solve(int n,int m)
{
int ret=;
if(n>m) swap(n,m);
for(int i=,j;i<=n;i=j+)
{
j=min(n/(n/i),m/(m/i));
ret+=(n/i)*(m/i)*(Query(j)-Query(i-));
}
return ret&Mod;
}
int main()
{
Prework();
scanf("%d",&T);
for(int i=;i<=T;i++)
scanf("%d%d%d",&qry[i].n,&qry[i].m,&qry[i].a),qry[i].idx=i;
sort(qry+,qry++T,cmp);
sort(sum+,sum++M,com);
for(int i=;i<=T;i++)
{
while(p<=M&&sum[p].f<=qry[i].a)
{
for(int j=sum[p].idx;j<=M;j+=sum[p].idx)
Add(j,mul[j/sum[p].idx]*sum[p].f); p++;
}
qry[i].ans=Solve(qry[i].n,qry[i].m);
}
sort(qry+,qry++T,cpr);
for(int i=;i<=T;i++) printf("%d\n",qry[i].ans);
return ;
}

解题:SDOI 2014 数表的更多相关文章

  1. [SDOI 2014]数表

    Description 有一张N×m的数表,其第i行第j列(1 < =i < =N,1 < =j < =m)的数值为 能同时整除i和j的所有自然数之和.给定a,计算数表中不大于 ...

  2. 「BZOJ 3529」「SDOI 2014」数表「莫比乌斯反演」

    题意 有一张 \(n\times m\) 的数表,其第\(i\)行第\(j\)列的数值为能同时整除\(i\)和\(j\)的所有自然数之和. \(T\)组数据,询问对于给定的 \(n,m,a\) , 计 ...

  3. 【BZOJ 3529】【SDOI 2014】数表

    看Yveh的题解,这道题卡了好长时间,一直不明白为什么要······算了当时太naive我现在都不好意思说了 #include<cstdio> #include<cstring> ...

  4. 解题:SDOI 2014 重建

    题面 做这个这个题需要稍微深入理解一点矩阵树定理:套矩阵树定理得到的东西是有意义的,它是“所有生成树边权乘积之和”(因为度数矩阵是点的边权和,邻接矩阵是边权),即$\sum_{t}\prod_{e∈t ...

  5. 【SDOI 2014】数表

    题意 https://loj.ac/problem/2193 题解 ​显然就是求 $\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sigma_1(\gcd{ ...

  6. 【BZOJ 3531】【SDOI 2014】旅行

    因为有$10^5$个宗教,需要开$10^5$个线段树. 平时开的线段树是“满”二叉树,但在这个题中代表一个宗教的线段树管辖的区间有很多点都不属于这个宗教,也就不用“把枝叶伸到这个点上”,所以这样用类似 ...

  7. [BZOJ 3530][Sdoi 2014]数数

    阿拉~好像最近总是做到 AC 自动机的题目呢喵~ 题目的算法似乎马上就能猜到的样子…… AC 自动机 + 数位 dp 先暴力转移出 f[i][j] :表示从 AC 自动机上第 j 号节点走 i 步且不 ...

  8. BZOJ 3533 sdoi 2014 向量集

    设(x,y)为Q的查询点,分类讨论如下:1.y>0:  最大化a*x+b*y,维护一个上凸壳三分即可 2.y<0:最大化a*x+b*y  维护一个下凸壳三分即可 我们考虑对时间建出一棵线段 ...

  9. 【BZOJ 3530】【SDOI 2014】数数

    http://www.lydsy.com/JudgeOnline/problem.php?id=3530 上午gty的测试题,爆0了qwq 类似文本生成器那道题,把AC自动机的转移建出来,准确地说建出 ...

随机推荐

  1. Ruby知识点二:类

    1.追查对象是否属于某个类时,使用is_a?方法  追查某个对象属于哪个类时,使用class方法 判断某个对象是否属于某个类时,使用instance_of?方法 判断类是否包含某个模块,使用inclu ...

  2. [shell] bash数组(for时排序)

    for处理时会自动把顺序按A-Z排序了 [root@XM-v106 ~]# bash b.sh A -> B -> C -> D -> E -> [root@XM-v10 ...

  3. 配置Tomcat使用HTTP/2

    转自: https://zhuanlan.zhihu.com/p/21349186 前情提要: Tomcat高效响应的秘密(一) Sendfile与Gzip Tomcat高效响应的秘密(二) keep ...

  4. 使用sass与compass合并雪碧图(二)

    上一篇文章介绍了怎样使用compass合并雪碧图,生成的icons.css文件中单位是px,PC端可以直接在html文件中使用,但在移动端,我们需要根据不同分辨率的屏幕,来缩放图片大小,显然使用px单 ...

  5. No.1_NABCD模型分析

        Reminder 之 NABCD模型分析           定位 多平台的闹钟提醒软件. 在安卓市场发布软件,发布后一周的用户量为1000.           N (Need 需求) 这个 ...

  6. Python写一个根据日期计算是星期几的模块

    import datetimedef get_week_day(date): week_day = { 0: '星期一', 1: '星期二', 2: '星期三', 3: '星期四', 4: '星期五' ...

  7. spring冲刺第七天

    昨天进行地图和人物的代码整合,有所缺陷. 今天使人物成功的在地图上运动,并设计炸弹爆炸效果. 遇到的问题:炸弹不会吧人物炸死,只会炸没砖块.

  8. Full GC

    1,新生代:(1)所有对象创建在新生代的Eden区,当Eden区满后触发新生代的Minor GC,将Eden区和非空闲Survivor区存活的对象复制到另外一个空闲的Survivor区中.(2)保证一 ...

  9. Ubuntu登录界面添加root用户登录选项

    1.普通用户登录系统并打开终端 配置root密码 $sudo passwd 切换至root用户 $su root 输入密码 修改以下配置文件 $nano /usr/share/lightdm/ligh ...

  10. Leetcode题库——20.有效的括号

    @author: ZZQ @software: PyCharm @file: IsValid.py @time: 2018/9/16 20:20 要求: 给定一个只包括 '(',')','{','}' ...