解题:SDOI 2014 数表
为了好写式子,先不管$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 数表的更多相关文章
- [SDOI 2014]数表
Description 有一张N×m的数表,其第i行第j列(1 < =i < =N,1 < =j < =m)的数值为 能同时整除i和j的所有自然数之和.给定a,计算数表中不大于 ...
- 「BZOJ 3529」「SDOI 2014」数表「莫比乌斯反演」
题意 有一张 \(n\times m\) 的数表,其第\(i\)行第\(j\)列的数值为能同时整除\(i\)和\(j\)的所有自然数之和. \(T\)组数据,询问对于给定的 \(n,m,a\) , 计 ...
- 【BZOJ 3529】【SDOI 2014】数表
看Yveh的题解,这道题卡了好长时间,一直不明白为什么要······算了当时太naive我现在都不好意思说了 #include<cstdio> #include<cstring> ...
- 解题:SDOI 2014 重建
题面 做这个这个题需要稍微深入理解一点矩阵树定理:套矩阵树定理得到的东西是有意义的,它是“所有生成树边权乘积之和”(因为度数矩阵是点的边权和,邻接矩阵是边权),即$\sum_{t}\prod_{e∈t ...
- 【SDOI 2014】数表
题意 https://loj.ac/problem/2193 题解 显然就是求 $\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sigma_1(\gcd{ ...
- 【BZOJ 3531】【SDOI 2014】旅行
因为有$10^5$个宗教,需要开$10^5$个线段树. 平时开的线段树是“满”二叉树,但在这个题中代表一个宗教的线段树管辖的区间有很多点都不属于这个宗教,也就不用“把枝叶伸到这个点上”,所以这样用类似 ...
- [BZOJ 3530][Sdoi 2014]数数
阿拉~好像最近总是做到 AC 自动机的题目呢喵~ 题目的算法似乎马上就能猜到的样子…… AC 自动机 + 数位 dp 先暴力转移出 f[i][j] :表示从 AC 自动机上第 j 号节点走 i 步且不 ...
- BZOJ 3533 sdoi 2014 向量集
设(x,y)为Q的查询点,分类讨论如下:1.y>0: 最大化a*x+b*y,维护一个上凸壳三分即可 2.y<0:最大化a*x+b*y 维护一个下凸壳三分即可 我们考虑对时间建出一棵线段 ...
- 【BZOJ 3530】【SDOI 2014】数数
http://www.lydsy.com/JudgeOnline/problem.php?id=3530 上午gty的测试题,爆0了qwq 类似文本生成器那道题,把AC自动机的转移建出来,准确地说建出 ...
随机推荐
- IP地址相关知识
IP地址基本概念 ...
- (xampp)lampp 下配置https(ssl)自签双向认证以后 apache无法启动解决方案
自签CA一般是没有应用场景的,因为需要客户端浏览器导入证书才能访问 但是在某些需要内部使用的场景下,确实是一个解决方案 但是在lampp配置了双向认证以后发现 原来自带的管理命令 lampp star ...
- mongodb 如何删除 字段值为 json对象中的某个字段值
例如: { attributes: { birthday:'1988-01-01', name: 'aq' } } birthday是attributes字段的value的一个字段, 我要删除birt ...
- openssl在多平台和多语言之间进行RSA加解密注意事项
首先说一下平台和语言: 系统平台为CentOS6.3,RSA加解密时使用NOPADDING进行填充 1)使用C/C++调用系统自带的openssl 2)Android4.2模拟器,第三方openssl ...
- 关于MySql8.X设置允许root远程登陆的问题
这是最近在mac上使用mysql workbench上遇到的一个小问题,仔细想了想其实这个问题本身就有毛病,论起正式环境来哪家公司是直接使用root去远程登录的呢?恐怕没几个,so不纠结root了创建 ...
- (转)Django 数据库
转:https://blog.csdn.net/ayhan_huang/article/details/77575186 目录 数据库说明 配置数据库 在屏幕输出orm操作对应的s ...
- java实验五实验报告
一.实验内容 Cmp传输与加解密 结对编程,一人服务器,一人客户端,服务器向客户端发送经RSA加密的密钥和用密钥加密的密文(使用DES算法),客户端负责接收加密后的密钥和密文,并解密得出明文. 二.实 ...
- VS2010+WinXP+MFC程序 无法定位程序输入点于动态链接库
1.问题描述 原开发环境:Win7 64位旗舰版,VS2010,ThinkPad T460 出现问题:自己开发的MFC程序在WinXP环境下无法正常运行,弹框“无法定位程序输入点InitializeC ...
- 《找出1到正整数N中出现1的次数》
<找出1到正整数N中出现1的次数> 编程思想:依次求出正整数每个位数上出现1的次数,累加即可得到最后想要的结果:而每一位上出现1的个数与和它相邻的其它位数上的数字有关系(以此位置上的数为对 ...
- git 提交本地文件,删除文件夹,修改文件等
1. 下载git工具包 链接: https://git-scm.com/download/win 2. 右键打开git bash 登陆到自己的github账户 $ git config --globa ...