Solution Set - 数学相关
CF645F
利用 \(\sum\limits_{d|n}\varphi(\frac{n}{d})=n\),只要对每个数 \(x\),求出 \(cnt_x\) 表示 \(x\) 的倍数数目,然后 \(\sum\limits_{x}\varphi(x)C_{cnt_x}^k\) 就是答案。每加入一个数进行修改,\(O(\sqrt n)\) 枚举因数即可。
CF724G
考虑一个连通块。随便取一棵生成树,则每条非树边带来一个环。从 \(u\) 到 \(v\) 的某条路径的异或和就等于生成树上 \(u\) 到 \(v\) 的路径的异或和再异或某些环的异或和。所以把所有环的异或和放进线性基,假设这线性基的大小是 \(c\)。然后按位考虑,假设根到各个点路径的异或和中,第 \(i\) 位上有 \(x\) 个 \(1\),\(y\) 个 \(0\)。如果线性基中没有数的第 \(i\) 位是 \(1\),那么这个连通块的这一位的贡献是 \(xy2^{i+c}\)。如果线性基中有数的第 \(i\) 位是 \(1\),则随便丢一个数和线性基中的数异或,第 \(i\) 位上一定是一半 \(0\) 一半 \(1\),这时这一位的贡献就是 \((x+y)(x+y-1)2^{i+c-2}\)。求和即可。
CF1034C
设所有点权的和是 \(S\)。考虑最终分成的块数,假设是 \(k\),则每一块的和都是 \(a=\frac{S}{k}\)。
可以给出唯一的一种构造:做拓扑排序,如果一个点的点权小于 \(a\) 则加到父亲,如果大于 \(a\) 则无解,如果等于 \(a\) 则不操作(相当于割掉了该点与父亲的边)。所以对固定的 \(k\),终态要么不存在,要么唯一。
假设已经求出了 \(f_k=0/1\) 表示是否存在合法终态,则可以做DP:\(dp_{i}=f_i(\sum\limits_{d|i,d\neq i}dp_d+f_i)\) 表示最终分成 \(i\) 块的方案数(考虑到可以多次的限制)。那么问题就变成求 \(f_k\)。
用上面给出的构造求 \(f_k\) 是不直接的,换一个思路。假设一个点 \(u\) 和父亲间的边被割断了,则 \(u\) 点的子树和 \(s_u\) 一定是 \(a\) 的倍数。由于分成 \(k\) 块,所以是 \(a\) 的倍数的 \(s_u\) 应该至少有 \(k\) 个(有一个点是根,虽然它没有父亲)。另一个几乎显然的事情是至多有 \(k\) 个 \(s_u\) 是 \(a\) 的倍数。所以 $f_k=1 \Leftrightarrow $ 有 \(k\) 个 \(s_u\) 是 \(a\) 的倍数。
又有 \(a|s_u\Leftrightarrow S|ks_u \Leftrightarrow \frac{S}{\gcd(S,S_u)}|k\),所以直接统计 \(\frac{S}{\gcd(S,S_u)}\) 所有不超过 \(n\) 的倍数就可以了。至于时间复杂度,DP是单 \(log\) 的,后面这个统计显然没什么问题。
CF1603D
显然 \(c(l,r)\ge r-l+1\),则 \(f(n,k)\ge n\)。当 \(r\lt 2l\) 时,\(c(l,r)=r-l+1\),所以当 \(n\lt 2^k\) 时,\(f(n,k)=n\)。这样 \(k\gt 20\) 都不用考虑。
一般情况下,\(f(n,k)\) 显然可以 DP 求:\(f(n,k)=\min_{m\le n}(f(m,k-1)+c(m+1,n))\)。我们尝试用四边形不等式把这个 DP 优化到 \(O(nk\log n)\)。
我们有
\]
则
\]
从而
\]
有了这个式子,预处理 \(\varphi\) 的前缀和,可以用整除分块在 \(O(\sqrt r)\) 的时间内求出 \(c(l,r)\),实际跑不满。同时我们可以证明 \(c\) 满足四边形不等式,这是因为
\(c(a,d)-c(b,d)=\sum\limits_{i=a}^{b-1}\sum\limits_{x=1}^{[\frac{d}{i}]}\varphi(x)\)
固定 \(a\lt b\),这个函数显然是关于 \(d\) 单调不减的。
那么直接用分治优化即可。
CF1770F
神仙题。
首先由于对称性,我们知道 \(a_i=t\) 的满足条件的序列数与 \(i\) 无关。则 \(n\) 为偶数时答案肯定是 \(0\)。
第二个想法是考虑容斥。假设长为 \(n\),和为 \(x\),按位或是 \(y\) 的子集(二进制下,下同)的所有数列异或和的异或和是 \(g(y)\),容易证明原问题的答案是所有满足 \(y'\) 是 \(y\) 的子集的 \(g(y')\) 的异或和。
问题转化为求 \(g(y)\)。按位考虑,因为已经假设了 \(n\) 是奇数,所以只用判断 \(a_1\) 的第 \(i\) 位是 \(1\) 的情况数是不是奇数。同时还要求按位或是 \(y\) 的子集。
先计算长为 \(n\),和为 \(x\),按位或是 \(y\) 的子集的数列数目。可以列出一个式子:\(\sum\limits_{a_1+\cdots+a_n=x}\prod\limits_{i=1}^{n}[a_i是y的子集]\)。看起来没什么意义,但是联想到 Kummer 定理的推论:\(C_{n}^{m}\) 是奇数当且仅当 \(m\) 是 \(n\) 的子集。所以上面这个式子就同余于 \(\sum\limits_{a_1+\cdots+a_n=x}\prod\limits_{i=1}^{n}C_{y}^{a_i}\)。而这个式子是范德蒙恒等式的 \(n\) 元情形,它就等于 \(C_{ny}^{x}\)。
对于 \(a_1\) 第 \(i\) 位是 \(1\) 的限制,会发现要求变成了 \(a_1-2^i\) 是 \(y-2^i\) 的子集(当然还要求 \(y\) 的第 \(i\) 位等于 \(1\)),所以上面那个组合数会变成 \(C_{ny-2^i}^{x-2^i}\)。如果它是奇数,那么对答案贡献 \(2^i\)(异或)。
综上,枚举 \(i\) 和 \(y\) 即可。这里的 \(y\) 是题目中 \(y\) 的子集。
CF1656H
重写目标,我们需要找到两个非空集合 \(A\in \{1,2,\cdots,n\},B\in\{1,2,\cdots,m\}\),满足 \(\text{lcm}_{i\in A}a_i=\text{lcm}_{j\in B}b_j\)。
这个目标等价于(记 \(P\) 为质数集)
\]
这个式子又可以变形为
\]
且
\]
两个条件分别等价于
\(\forall i\in A,\text{lcm}_{j\in B}\gcd(a_i,b_j)=a_i\)
\(\forall j\in B,\text{lcm}_{i\in A}\gcd(a_i,b_j)=b_j\)
接下来来设计算法的整体框架。初始令 \(A=\{1,2,\cdots,n\},B=\{1,2,\cdots,m\}\)。如果发现某个 \(i\in A\) 或 \(j\in B\) 使上面的条件不成立,那么就删去它,它肯定不能存在于最后的答案中(显然删掉更多不会让它可行)。删到不能再删为止,如果此时删空了一个集合就表明无解,否则留下的就是解。
\(n,m\le 1000\),我们可以在删去一个数的时候暴力枚举另一个集合中的数,计算影响。但是 \(\text{lcm}\) 并不可减,因此可以使用一个线段树维护,删掉一个数就把对应位置改为 \(1\),用全局 \(\text{lcm}\) 比较即可。
时间复杂度 \(O(n^2\log n\log V)\)(视 \(n,m\) 同阶),在这题 10s 的时限下不是问题。
CF986F
显然只需要考虑 \(k\) 的素因数。
如果没有,显然为 NO。
如果只有 \(1\) 个 \(p_0\),判断 \(n\) 是否是 \(p_0\) 的倍数即可。
如果恰有 \(2\) 个 \(p_0,p_1\),用 exgcd 判断即可。
如果至少有 \(3\) 个,则最小的一个 \(p_0\le k^{\frac{1}{3}}\le 10^5\)。考虑经典的同余最短路模型,把 \(0,1,\cdots,p_0-1\) 看作点,对每个素因数 \(p_i\),从 \(i\) 向 \((i+p_i)\bmod p_0\) 连边,边权为 \(p_i\)。则能凑出 \(n\) 的条件是 \(dis_{n\bmod p_0}\le n\) 。
使用 dijkstra 求最短路可能超时,但其实不需要,因为模运算具有良好的性质,所以可以钦定先走边权 \(p_1\) 的边,再走边权 \(p_2\) 的边,以此类推。对于每个 \(p_i\) 会把整个图连成一个环,在环上转两圈更新最短路即可。
Solution Set - 数学相关的更多相关文章
- codeforces 687B - Remainders Game 数学相关(互质中国剩余定理)
题意:给你x%ci=bi(x未知),是否能确定x%k的值(k已知) ——数学相关知识: 首先:我们知道一些事情,对于k,假设有ci%k==0,那么一定能确定x%k的值,比如k=5和ci=20,知道x% ...
- 【3D研发笔记】之【数学相关】(一):坐标系
现在开始学习3D基础相关的知识,本系列的数学相关笔记是基于阅读书籍<3D数学基础:图形与游戏开发>而来,实现代码使用AS3,项目地址是:https://github.com/hammerc ...
- [自用]多项式类数学相关(定理&证明&板子)
写在前面 由于上一篇总结的版面限制,特开此文来记录 \(OI\) 中多项式类数学相关的问题. 该文启发于Miskcoo的博客,甚至一些地方直接引用,在此特别说明:若文章中出现错误,烦请告知. 感谢你的 ...
- [总结]数论和组合计数类数学相关(定理&证明&板子)
0 写在前面 0.0 前言 由于我太菜了,导致一些东西一学就忘,特开此文来记录下最让我头痛的数学相关问题. 一些引用的文字都注释了原文链接,若侵犯了您的权益,敬请告知:若文章中出现错误,也烦请告知. ...
- [总结]多项式类数学相关(定理&证明&板子)
目录 写在前面 前置技能 多项式相关 多项式的系数表示 多项式的点值表示 复数相关 复数的意义 复数的基本运算 单位根 代码相关 多项式乘法 快速傅里叶变换 DFT IDFT 算法实现 递归实现 迭代 ...
- [总结]其他杂项数学相关(定理&证明&板子)
目录 写在前面 一类反演问题 莫比乌斯反演 快速莫比乌斯变换(反演)与子集卷积 莫比乌斯变换(反演) 子集卷积 二项式反演 内容 证明 应用举例 另一形式 斯特林反演 第一类斯特林数 第二类斯特林数 ...
- Python学习笔记17:标准库之数学相关(math包,random包)
前面几节看得真心累.如今先来点简单easy理解的内容. 一 math包 math包主要处理数学相关的运算. 常数 math.e # 自然常数e math.pi # 圆周率pi 运算函数 math ...
- Java.util.Math类--数学相关的工具类
Math类--数学相关的工具类 java.util.Math类是数学相关的工具类,里面提供了大量的静态方法,完成与数学运算相关的操作. public static double abs(double ...
- 数学相关【真·NOIP】
数论相关 上来就不会的gcd相关.见SCB他威胁我去掉了一个后缀的blog好了:https://blog.csdn.net/suncongbo/article/details/82935140(已经过 ...
- Java工具类——数学相关的类
Java工具类--数学相关的类 在上一篇文章中,我们系统学习了 Java 里面的包装类,那么这篇文章,我们就来学习一下Java提供好的类--数学相关的类. 一.数学类介绍 在最早期学习 Java 基础 ...
随机推荐
- [ROS串口通信]Serial库读入结构体
本文介绍使用c++中Serial库读入结构体: //例如,结构体定义如下: typedef struct __attribute__((packed)) { uint16_t team; /* 本身队 ...
- KingbaseES V8R6集群运维案例--主库PITR恢复后备库无法连接到集群
案例说明: KingbaseES V8R6集群,在主库执行PITR恢复后,clone备库:但是启动集群后,备库无法连接到主库,流复制状态和集群节点状态异常. 适用版本: KingbaseES V8R6 ...
- 算法学习笔记【1】| LCA(最近公共祖先)
LCA(最近公共祖先) Part 1:逐步上跳 假设u,v是所求的两点,先把深度大的点逐步上移直到深度相同. 然后两者同时上移,直到第一次遇到相同的点为止. 时间复杂度: O(n)<script ...
- ubuntu 联网
使用NAT
- #博弈论#Poj 1740 A New Stone Game
题目 两个人轮流操作,每次选择一个非空石堆后, 选择扔掉至少一个石子后可将剩余石子任意移动至其余非空石堆, 也可以不移,无石子可取者为败,问先手是否必胜 分析 感性理解一下,如果有两堆个数相同的石子, ...
- OpenHarmony社区运营报告(2023年12月)
• 截至2023年12月22日,OpenAtom OpenHarmony(简称"OpenHarmony")社区累计超过6700名贡献者,产生26.9万多个PR,2.4万多个St ...
- 宝塔面板配置MongoDB数据库
1-安装MongoDB 在面板中的[软件商店]搜索MongoDB并安装,推荐下载4.x以上的版本(可视化工具MongoDB Compass对高版本兼容比较好). 下载完成后,可以点击[设置],[版本切 ...
- 把vim配置成顺手的python轻量级IDE(一)
把vim配置成顺手的python轻量级IDE(一) 地球的外星人君 Linux云计算和Python推动市场提升的学习研究者. 分享一篇文章,正好最近正在折腾VIM,原文在把vim配置成顺手的pytho ...
- 聊聊 Redis Stream
Redis Stream 是 Redis 5.0 版本中引入的一种新的数据结构,它用于实现简单但功能强大的消息传递模式. 这篇文章,我们聊聊 Redis Stream 基本用法 ,以及如何在 Spri ...
- 【最简单】禁用Chrome的“请停用以开发者模式运行的扩展程序”提示
安装油猴插件后,每次打开Chrome浏览器后右上角都会提示,"请停用以开发者模式运行的扩展程序"的一个窗口,强迫症患者表示很烦. 小白的我试过网上多数方法,有些已经失效,有些都太麻 ...