
--------------数学相关------------
Lynstery
一只蒟蒻
展开
-
[矩阵乘法+KMP] BZOJ1009: [HNOI2008]GT考试
题意阿申准备报名参加GT考试,准考证号为N位数X1X2….Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字。 他的不吉利数学A1A2…Am(0<=Ai<=9)有M位,不出现是指X1X2…Xn中没有恰好一段等于A1A2…Am。可以有前导0。 求不出现不吉利的数字的方案数。 N<=1e+9 M<=20题解考虑到之前求方案数比较难求,肯定需要递推求解。 注意到在准考证号中找不吉利数字有原创 2017-02-20 19:57:07 · 866 阅读 · 0 评论 -
[高斯消元] BZOJ1013: [JSOI2008]球形空间产生器sphere
题意给出n维空间中的n+1个点,保证这些点都在一个球体的表面。求这个n维球体的球心坐标。 给出两个定义: 球心:到球面上任意一点距离都相等的点。 距离:设两个n为空间上的点A, B的坐标为(a1, a2, …, an), (b1, b2, …, bn),则AB的距离定义为:dist = sqrt( (a1-b1)^2 + (a2-b2)^2 + … + (an-bn)^2 ) n<=10题解原创 2017-02-21 08:55:02 · 1172 阅读 · 0 评论 -
扩展欧几里得算法——模板整理
用于求解ax+by=gcd(a,b),有一系列其他应用。 时间复杂度:O(log2nlog_2n)#include<cstdio>#include<algorithm>using namespace std;typedef long long LL;LL a,b,ans1,ans2,_gcd;void exgcd(LL a,LL b,LL &x,LL &y){ if(!b){ x原创 2017-02-21 20:19:48 · 819 阅读 · 0 评论 -
[FFT 模板题] HDU 1402:A*B Problem Plus
题意实现高精乘法。位数<=50000题解FFT 模板题。#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std;const double PI=acos(-1.0);const int maxn=(1<<18)+5;struct E{ double real,i原创 2017-03-31 20:10:20 · 447 阅读 · 0 评论 -
[置换群+背包] BZOJ1004: [HNOI2008]Cards
题意小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红,蓝,绿。 小春发明了M种不同的洗牌法,问Sun有多少种不同的染色方案。 两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法,而每种方法可以使用多次)洗成另一种。 输入数据保证任意多次洗牌都可用这 m种洗牌法中的一种代 替,且对每种洗牌法,都存在一种洗牌法使得能回到原状态。 答案可能很原创 2017-04-09 19:43:02 · 459 阅读 · 0 评论 -
费马小定理与欧拉定理——学习笔记
有关的剩余系概念按模n是否同余对整数集进行分类,可得到模n的n个剩余类[0],[1],[2],[3]…[n-1]。每个剩余类中取一个数作为代表,组成的集合称为完全剩余系。完全剩余系中的n个数模m两两不同余。显然一个剩余类中有一个数与n互质,这个剩余类中的其他数都与n互质,称为互素剩余类。在完全剩余系中只保留互素剩余类的集合称为简化剩余系。费马小定理m为素数,且gcd(a, m)=1 则有a^(m-1原创 2017-02-12 11:58:35 · 762 阅读 · 0 评论 -
卡特兰数——学习笔记
什么是卡特兰数? 先看几个经典问题: n个元素依次入栈,其出栈序列的方案总数。 由n个1与n个-1组成的满足任意前缀和非负的序列总数。 多边形三角剖分方案数。 n个节点组成的不同二叉树方案数。 … 可以看出上述问题都有共同的特点,我们可以把它们都转化为这样一个模型: 在平面直角坐标中,起始位置在(0,0),每次只能(+1,+1)或(+1,-1),求在路线不跨越x坐标的前提下走到(2*原创 2017-02-26 20:48:51 · 814 阅读 · 0 评论 -
[博弈] BZOJ1022: [SHOI2008]小约翰的游戏John
题意小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到最后一粒石子的人算输。小约翰相当固执,他坚持认为先取的人有很大的优势,所以他总是先取石子,而他的哥哥就聪明多了,他从来没有在游戏中犯过错误。小约翰一怒之前请你来做他的参谋。自然,你应该先写一个程序,预测一下谁原创 2017-03-27 21:14:28 · 526 阅读 · 0 评论 -
Codeforces #206(Div.1) C. Vasya and Beautiful Arrays
题意给出n个数字,和K。每个数字ai可以变成[ai-K,ai]范围内的值。求所有数gcd起来最大值。题解水水的小题,这种题目要做到准确快速。 可以想到枚举公因数g,然后判断n个数是否可能是g的倍数。 很简单,对于每个g的倍数g∗ig*i,取n个数落在[g∗i,g∗i+K][g*i,g*i+K]中的个数。如果总数为n,则可行。 要注意区间可能重叠,不能算重。#include<cstdio>#i原创 2017-05-26 07:59:49 · 586 阅读 · 0 评论 -
[排列组合 + 分段打表] 51nod 算法马拉松25 A. 二分答案
题意题解分析一下可得,如果二分最后要停在k位置,需要有一些位置上的值满足与m的一些大小关系,而且关系都是确定的。 直接模拟一趟就可以得到:有num1个位置需要满足a[i]<=ma[i]<=m,有num2的位置需要满足a[i]>ma[i]>m,其他位置显然可以随便乱放,因为根本就不会访问到它们。 这样就能直接写出答案的表达式了: Pnum1m∗Pnum2n−m∗(n−num1−num2)!P_m原创 2017-05-28 22:39:55 · 1002 阅读 · 0 评论 -
[期望DP+高斯消元] BZOJ3143: [Hnoi2013]游走
题意一个无向连通图,顶点从1编号到N,边从1编号到M。 小Z在该图上进行随机游走,初始时小Z在1号顶点。 每一步小Z以相等的概率随机选择从当前顶点出去的某条边走,并获得等于这条边的编号的分数。 当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和。 现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小。 n<=500题解直接算题目要求的东西有点难办。 首先边权的分配与小Z原创 2017-05-20 12:11:32 · 476 阅读 · 0 评论 -
主定理——学习笔记
刚刚发现自己以前认为的递归算法复杂度分析都是错的…… 主定理:(以下摘自算导) 另a≥1a\ge1和b>1b>1是常数,f(n)f(n)是一个函数,T(n)T(n)是定义在非负整数上的递归式:T(n)=aT(n/b)+f(n)T(n)=aT(n/b)+f(n) 其中n/bn/b 被解释为⌊n/b⌋\lfloor n/b\rfloor或⌈n/b⌉\lceil n/b\rceil。(对以下结果无影原创 2017-06-05 22:35:13 · 1188 阅读 · 0 评论 -
[方差+lucas定理] 51nod 算法马拉松25 D. 小Q的集合
题意小Q有一个集合 S ,它的元素个数 |S|=n 。 对于 S 的任意一个子集合 T ,定义 f(T)=|T|kf(T)=|T|^k ,定义 T 关于 S 的补集为 S−T 。 小Q想知道,如果他等概率地选择一个 S 的子集 T ,那么 f(T)−f(S−T) 的方差是多少。 由于这个方差值可能很大,不妨设其为 v ,你只需要给出 (v⋅2n)%m(v⋅2^n) \% m 的值即可。 k原创 2017-06-03 09:06:26 · 1558 阅读 · 0 评论 -
[DP套DP] UOJ#141. 【UER #4】量子态的棋盘
题意 n,m<=10 K<=1e+18题解这个小球数很大,但是注意到如果落在某个网格的小球数为偶数,必然是一半往上一半往下,与格子权值无关,只有当小球数为奇数的时候,最后一个小球的走向才和格子权值有关。 所以我们先推一趟,把不确定走向的小球留在那个位置。这样最多就只有n*m个球了。 然后考虑轮廓线DP,记下这里有几个小球从这个边界位置滚下。 这个状态数的数量比较玄学,反正就是能过的。 如何原创 2017-06-29 14:21:23 · 735 阅读 · 1 评论 -
[二分+容斥+莫比乌斯函数] BZOJ2440: [中山市选2011]完全平方数
题意求从小到大第k个无平方因子数是多少。(原题面表述略有问题) k<=1e+9题解这题与反演无关,就用到了莫比乌斯函数。 首先肯定二分答案然后验证,现在问题转化为了求[1,mid]中无平方因子数的个数。 怎么求呢?考虑容斥,(p是1~sqrt(m)内的质数集) 总个数=[(pi)2的倍数]−[(pi∗pj)2的倍数]+[(pi∗pj∗pk)2的倍数]−[(pi∗pj∗pk∗pt)2的倍数].原创 2017-07-02 16:36:26 · 467 阅读 · 2 评论 -
[莫比乌斯反演+分块求和] BZOJ2820: YY的GCD
题意给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对。 T(组数) = 10000 N,M<=10000000题解如果我们枚举质数p=gcd(x,y)p=gcd(x, y),然后反演: 设f(i)f(i)表示满足gcd(x,y)gcd(x,y)等于ii的有序数对(x,y)(x,y)的个数。 F(i)=∑i|df(d)=⌊ni⌋⌊mi⌋F(i)=原创 2017-07-02 17:15:46 · 960 阅读 · 4 评论 -
[莫比乌斯反演+容斥+分块求和] BZOJ2301: [HAOI2011]Problem b
莫比乌斯反演经典入门题。 首先用容斥,把问题转化为1<=x<=n且1<=y<=m的。 设f(i)f(i) 表示满足gcd(x,y)等于i的有序数对(x,y)的个数。(1<=x<=n且1<=y<=m) 构造F(i)=∑i|df(d)F(i)=\sum_{i|d}f(d),即满足i|gcd(x,y)的有序数对(x,y)的个数。 F(i)F(i)很好求,只有x和y都是i的倍数即可,所以F(i)=⌊原创 2017-07-02 16:39:12 · 607 阅读 · 2 评论 -
[莫比乌斯反演+数状数组] BZOJ3529: [Sdoi2014]数表
题意有一张N×m的数表,其第i行第j列(1 <=i <=n,1 <=j <=m)的数值为 能同时整除i和j的所有自然数之和。给定a,计算数表中不大于a的数之和。 多次询问,输入的第一行一个整数Q表示测试点内的数据组数,接下来Q行,每行三个整数n,m,a(|a| < =10^9)描述一组数据。 n,m,Q <=10^5 题解设g(i)为gcd(x,y)等于i的数对个数(x<=n,y<=m),原创 2017-07-03 11:49:04 · 413 阅读 · 2 评论 -
[SG函数] HDU1848: Fibonacci again and again
题意任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(2)=2; F(n)=F(n-1)+F(n-2)(n>=3); 所以,1,2,3,5,8,13……就是菲波那契数列。 在HDOJ上有不少相关的题目,比如1005 Fibonacci again就是曾经的浙江省赛题。 今天,又一个关于Fibonacci的题目出现了,它原创 2017-06-11 21:22:10 · 349 阅读 · 0 评论 -
[杜教筛] 51Nod 1244: 莫比乌斯函数之和
题意求∑Ri=Lμ(i)\sum_{i=L}^R\mu(i),L,R≤1011L,R\le10^{11}题解杜教筛模板题。 g(1)S(n)=∑i=1n(f∗g)(i)−∑i=2ng(i)S(⌊ni⌋)g(1)S(n)=\sum_{i=1}^n(f*g)(i)-\sum_{i=2}^ng(i)S(\lfloor\frac{n}{i}\rfloor) μ∗1=ϵ\mu∗1=\epsilon,gg取原创 2017-07-03 21:00:55 · 720 阅读 · 2 评论 -
[杜教筛] 51Nod 1239: 欧拉函数之和
题意求∑ni=1ϕ(i)\sum_{i=1}^n\phi(i)题解模板题 S(n)=(1+n)∗n2−∑i=2nS(⌊ni⌋)S(n)=\frac{(1+n)*n}{2}-\sum_{i=2}^nS(\lfloor\frac{n}{i}\rfloor)#include<cstdio>#include<map>#include<cstring>#include<algorithm>#incl原创 2017-07-03 22:48:09 · 638 阅读 · 2 评论 -
[FFT] BZOJ3527: [Zjoi2014]力
题意给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qiE_i=F_i/q_i,求EiE_i. n≤100000,0<qi<1000000000n≤100000,0<qi<1000000000题解FFT的简单运用。 Ej=∑i=1j−1qi(i−j)2−∑i=j+1nqi(i−j)2E_j=\sum_{i=1}^{j-1} \frac{q_i}{(i-j)^2}-\sum_{i=j+1原创 2017-07-12 23:53:05 · 371 阅读 · 0 评论 -
[杜教筛] BZOJ3944: Sum
题意给定n, 求∑ni=1ϕ(i)\sum_{i=1}^n \phi(i)和∑ni=1μ(i)\sum_{i=1}^n \mu(i) n≤231−1n \le 2^{31-1}题解假装做了一道新题 这道题=这题+这题水啊水#include<cstdio>#include<map>#include<cstring>#include<algorithm>#include <tr1/unord原创 2017-07-04 12:12:26 · 646 阅读 · 2 评论 -
[杜教筛+莫比乌斯反演] HDU5608: function
题意题解我们设 g(i)=i2−3i+2g(i)=i^2-3i+2,题目告诉我们的就是 g=f∗1g=f*1。然后就可以根据杜教筛的思路搞了: ∑i=1ng(i)=∑i=1n∑d|if(d)=∑i=1n∑d⌊ni⌋f(d)=∑i=1nS(⌊ni⌋)\sum_{i=1}^ng(i)=\sum_{i=1}^n \sum_{d|i}f(d)=\sum_{i=1}^n\sum_d^{\lfloor\fra原创 2017-07-04 21:01:02 · 395 阅读 · 2 评论 -
[线性基+贪心] BZOJ2460: [BeiJing2011]元素
题意给出n个元素的数集,每个数都有一个权值,求选出一个异或和不为0的子集,使得权值和最大。 N ≤ 1000,其他 ≤ 10^18题解经典线性基应用。 线性基可以判断某个数是否能在已插入线性基的数相互异或得到,这样就能判断这个数是否能选。 需要得到的权值最大,那么直接对于每件物品按权值排序,按权值从大到小插入即可。#include<cstdio>#include<algorithm>usi原创 2017-06-13 15:38:59 · 426 阅读 · 0 评论 -
[博弈+线性基] BZOJ3759: Hungergame
题意有n(n<=20)个箱子,每个箱子里面有ai(ai<=1000000000)个石头(怎么放进去的我就不知道了) 两个人轮流进行操作(女主角先手),每一次操作可以将任意个(大于0个)未打开的箱子打开(一开始所有的箱子都是关闭的), 或者在已经打开的一个箱子里拿走任意个(大于0个)石头(不能超过这个箱子现有的石头数)。 最后谁无法操作谁就输了。 现在给出n,和这n个箱子里的石头数ai,女主角原创 2017-06-13 14:40:37 · 478 阅读 · 0 评论 -
[Trie树] BZOJ3689: 异或之
题意给定n个非负整数A[1], A[2], ……, A[n]。 对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这样共有n*(n-1)/2个新的数。求这些数(不包含A[i])中前k小的数。 n<=100000题解有关Trie与二进制的一些运用之前完全不会,现在补一下。 我们可以把所以数字从高位开始插到Trie里,根据每个节点维护的size, 就原创 2017-07-13 17:03:12 · 518 阅读 · 3 评论 -
[莫比乌斯反演+杜教筛] 51Nod1237: 最大公约数之和 V3
题意求∑ni∑njgcd(i,j)\sum_i^n\sum_j^ngcd(i,j) n≤1010n\le10^{10}题解∑in∑jngcd(i,j)=∑d=1n∑i=1n∑j=1n[gcd(i,j)=d]∗d=∑d=1n∑i=1⌊nd⌋∑j=1⌊nd⌋[gcd(i,j)=1]∗d\sum_i^n\sum_j^ngcd(i,j)=\sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}原创 2017-07-04 22:38:04 · 744 阅读 · 2 评论 -
[可持久化Trie] BZOJ3261: 最大异或和
题意给定一个非负整数序列 {a},初始长度为 N。 有 M个操作,有以下两种操作类型: 1 、A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1。 2 、Q l r x:询问操作,你需要找到一个位置 p,满足 l<=p<=r,使得: a[p] xor a[p+1] xor … xor a[N] xor x 最大,输出最大是多少。 n<=300000题解用容斥转换一下,设原创 2017-07-13 21:51:16 · 676 阅读 · 0 评论 -
[组合] UOJ#308. 【UNR #2】UOJ拯救计划
题意给定一张n个点m条边的无向图,给图的所有顶点染色,使得对于任意一条边,两端的颜色不同。有K种颜色可用。 求染色的方案数模6的值。题解挺简单的题目,但是做的时候就没想到……我好菜啊…… 就是一个经典的貌似是NPC的问题,然后只需要输出答案%6,使问题特殊化。 哪里特殊了呢? 我们这样考虑答案: ans=∑i=1KA(K,i)∗[刚好用i了种颜色的方案数]ans=\sum_{i=1}^K原创 2017-07-16 00:23:41 · 767 阅读 · 0 评论 -
[生成函数+容斥+FFT] BZOJ3771: Triple
题意给出n个物品,每个物品有一个价值Ai。可以选一个或两个或三个,求每种可能的总价值的选取方案。 Ai≤40000Ai \le 40000题解题面好有趣…… 考虑构造普通型生成函数A(x),表示取一个的方案。 答案肯定不能直接A3+A2+AA^3+A^2+A,因为一个物品可能被取了多次,考虑如何去重。 取一个就是AA 没错, 取两个是(A2−B)/2(A^2-B)/2,BB是取相同的两个的原创 2017-07-20 13:39:54 · 581 阅读 · 0 评论 -
FWT——学习笔记
什么是FWT?我们知道普通的卷积是这样的: Ci=∑j+k=iAj∗BkC_i=\sum_{j+k=i}A_j*B_k 我们用FFT可以加速这一过程。 现在我们把++ 改成某位运算,成了位运算的卷积: Ci=∑j⊕k=iAj∗BkC_i=\sum_{j⊕k=i}A_j*B_k FWT就是用于解决这种卷积的。具体思想考虑一个变换:DWT(A)i=∑j=0n−1Aj∗f(i,j)DWT(A)_原创 2017-07-20 16:02:20 · 1396 阅读 · 1 评论 -
[FWT+Nim游戏] BZOJ4589: Hard Nim
题意Claris和NanoApe在玩石子游戏,他们有n堆石子,规则如下: 1.Claris和NanoApe两个人轮流拿石子,Claris先拿。 2.每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜。 不同的初始局面,决定了最终的获胜者,有些局面下先拿的Claris会赢,其余的局面Claris会负。 Claris很好奇,如果这n堆石子满足每堆石子的初始数量是不超过原创 2017-07-20 21:52:14 · 489 阅读 · 0 评论 -
[单纯形] UOJ#179. 线性规划
题意解线性规划,以标准型给出。n个变量, m个约束。 n,m≤20n,m\le 20题解单纯形模板题#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const int maxn=55;const double eps=1e-8;int n,m,Type;do原创 2017-07-08 23:00:53 · 522 阅读 · 2 评论 -
[杜教筛+莫比乌斯反演] 51Nod1238: 最小公倍数之和 V3
题意求∑ni=1∑nj=1lcm(i,j)\sum_{i=1}^n \sum_{j=1}^n lcm(i,j) n≤1010n \le 10^{10}题解自己推到后面就不会了,然后去找题解…… 大概就是 ∑i=1n∑j=1nijgcd(i,j)=∑d=1n∑i=1⌊nd⌋∑j=1⌊nd⌋[gcd(i,j)=1]i∗j∗d2d\sum_{i=1}^n \sum_{j=1}^n \frac{ij}原创 2017-07-07 12:54:55 · 778 阅读 · 0 评论 -
[单纯形+对偶] BZOJ1061: [Noi2008]志愿者招募
题意即将启动的奥运新项目要招募一批短期志愿者。 经过估算,这个项目需要n 天才能完成,其中第i 天至少需要bi 个人。 一共有m 类志愿者可以招募。其中第i 类可以从第Si 天工作到第Ti 天,招募费用是每人ci 元。求尽量少的费用招募足够的志愿者。 n≤1000,m≤10000n\le 1000, m \le 10000题解这题官方做法是巧妙的建图跑费用流,但是我想不到。直接上单纯形也是可以原创 2017-07-09 19:59:23 · 605 阅读 · 1 评论 -
[单纯形+对偶] BZOJ3118: Orz the MST
题意给出一个带权的连通无向图,对于其中的每条边i,在原来边权的基础上,其边权每增加1需要付出的代价为Ai,边权每减少1需要付出的代价为Bi,现在指定该图的一棵生成树,求通过修改边权,使得该生成树成为图的一棵最小生成树,需要付出的最少总代价。 1<=N<=300, 1<=M, Wi, Ai, Bi<=1000题解有个显然的结论就是我们只会减小指定树边的权值,只会增加非树边的权值。 然后我们考虑满足原创 2017-07-10 09:12:00 · 489 阅读 · 1 评论 -
[单纯形+对偶] BZOJ3265: 志愿者招募加强版
题意 题解如果这题 是用单纯形做的话,这题就没什么加强了…… 裸的线性规划。#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const double eps=1e-8;double a[10005][1005];int n,m,id[20005];voi原创 2017-07-10 10:50:56 · 554 阅读 · 1 评论 -
[FWT] 51nod 算法马拉松26 A. A国的贸易
题意A国是一个神奇的国家。 这个国家有 2n 个城市,每个城市都有一个独一无二的编号 ,编号范围为0~2n-1。 A国的神奇体现在,他们有着神奇的贸易规则。 当两个城市u,v的编号满足calc(u,v)=1的时候,这两个城市才可以进行贸易(即有一条边相连)。 而calc(u,v)定义为u,v按位异或的结果的二进制表示中数字1的个数。ex:calc(1,2)=2 ——> 01原创 2017-07-21 21:37:24 · 637 阅读 · 3 评论 -
[期望DP] UOJ#311. 【UNR #2】积劳成疾
题意题解我太菜了…… 看官方题解吧: #include<cstdio>#include<algorithm>using namespace std;typedef long long LL;const LL maxn=405, MOD=998244353;int n,m,w[maxn];LL p[maxn][maxn],f[maxn][maxn];int main(){ f原创 2017-07-18 22:50:32 · 661 阅读 · 0 评论