
数学
stduy_ing
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #778 D. Potion Brewing Class(数组模拟 lcm)
链接:D. Potion Brewing Class 题意: 给一颗树,知道相邻节点权值的比值,求树的所有节点的权值和的最小值(每个节点权值都是整数)。 思路: 如果确定1号节点的权值为 1 , 那么所有节点的值都可以求出来,但要求是整数,所以我们只要求出把每个权值化为最简分数后所有分母的lcm,最后把每个节点的值都乘这个lcm即可。 这个思路不难想,但实现起来有点麻烦(比赛写了个爆ll的自暴自弃,现在写完发现好像也不难写),因为分母的范围是会超过 long long的,所以我们用数组记录没遍历完一个节点原创 2022-03-21 16:40:00 · 765 阅读 · 0 评论 -
2021牛客暑期多校训练营1 H Hash Function (FFT + 数学)
链接:H Hash Function 题意: 给定一个长度为 n (n≤500000n\leq 500000n≤500000) 的数组 a,数组中元素互不相同 , 现要求出一个最小的 x , 使得所有的数模 x后仍互不相同。 思路: 根据同余定理,这个数 x 肯定不能是数组a中任意两个数的差值和他们的因子。所以我们要求出数组中所有数两两之间的差值,如果直接求肯定要o(n2n^2n2),可以用 FFT 加速这个过程。 FFT本身是求出两个多项式相乘后的系数,那么怎么用它来求数组a中两两的差有哪些呢。假设我们原创 2021-07-27 22:06:53 · 189 阅读 · 0 评论 -
HDU 6579 B - Operation (线性基 + 贪心)
链接: B - Operation 题意: 给你 n 个数和 m 次操作,操作有两种类型 : 操作一 : 表示在区间[l , r]中找出任意个数,使这些数的异或和最大。 操作二 : 在数组末尾插入一个数x。 思路 : 对于区间异或和最大的问题,首先要想到线性基。我们可以先了解一下什么是 线性基。 我们可以维护一个前缀线性基 , 用val[i][j] ,表示区间[1 , i]的第 j 位线性基的值。用 pos[i][j] 表示区间[1 , i]的第 j 位线性基的位置,如果我们贪心的让pos[i][j]原创 2021-03-17 01:22:58 · 261 阅读 · 0 评论 -
线性基学习
线性基 线性基是一个数的集合,并且每个序列都拥有至少一个线性基,取线性基中若干个数异或起来可以得到原序列中的任何一个数。 线性基的性质 原序列里面的任意一个数都可以由线性基里面的一些数异或得到 线性基里面的任意一些数异或起来都不能得到 0 线性基里面的数的个数唯一,并且在保持性质一的前提下,数的个数是最少的 线性基中每个元素的二进制最高位互不相同。 构造方法 对于要插入的数x,可以从大到小枚举每一个二进制位,如果这一位为 1 ,并且如果这一位的p[ i ]不存在,我们直接让这一位的p[ i ]等于 x原创 2021-03-17 01:07:51 · 118 阅读 · 0 评论 -
2021牛客寒假算法基础集训营6 B - 系数 (Lucas)
链接:B - 系数 题意: 思路 因为最后结果 要求% 3 所以原式可以变成 (x−1)2n(x - 1) ^ {2 n}(x−1)2n,所以最后的答案就是 (−1)2n−k(-1) ^ {2n - k}(−1)2n−k C2nkC_{2n}^{k}C2nk,因为n ,k 都很大 所以直接用 lucas 定理求解。 代码: #include<iostream> #include<cstdio> #include<set> #include<map> #i原创 2021-03-05 16:13:28 · 121 阅读 · 0 评论 -
HDU 5974 - A Simple Math Problem (数论)
链接: A Simple Math Problem 题意: 给出a(1<=a<=2e4), b(1<=b<=1e9 , 要找到 x , y 使得x + y = a, lcm( x , y) = b.多组输入(1e5 组)。 思路: 这个数据范围肯定是不能暴力枚举的,最重要的是知道 gcd(a , b ) = gcd(x , y)。证明可参考 链接 根据一下两式可以列出一元二次方程 ,求解即可。 xy = lcm(x,y)∗gcd(x,y)=b∗gcd(a,b) x+y=a 代码:原创 2021-02-09 23:46:02 · 465 阅读 · 0 评论