数学
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 · 749 阅读 · 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 · 180 阅读 · 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 · 238 阅读 · 0 评论 -
线性基学习
线性基线性基是一个数的集合,并且每个序列都拥有至少一个线性基,取线性基中若干个数异或起来可以得到原序列中的任何一个数。线性基的性质原序列里面的任意一个数都可以由线性基里面的一些数异或得到线性基里面的任意一些数异或起来都不能得到 0线性基里面的数的个数唯一,并且在保持性质一的前提下,数的个数是最少的线性基中每个元素的二进制最高位互不相同。构造方法对于要插入的数x,可以从大到小枚举每一个二进制位,如果这一位为 1 ,并且如果这一位的p[ i ]不存在,我们直接让这一位的p[ i ]等于 x原创 2021-03-17 01:07:51 · 111 阅读 · 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 · 110 阅读 · 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 · 432 阅读 · 0 评论