
数论
数论
gongyuandaye
不要再问我会不会写可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP了。
展开
-
HDU 6889 Graph Theory Class (Min25筛)
题意:n个点的完全图,边权为lcm(i+1, j+1),求mst。题解:Min25筛质数与2连,其他点与最小因子连,那么只要求n以内质数和即可。比赛的时候本来想用区间筛打表的,这题其实套个Min25筛就好了,因为1e10,用int128存质数和,避免取模,结果调了一个下午,居然是n为1没输出。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#i原创 2020-09-21 17:42:59 · 1441 阅读 · 0 评论 -
HDU 6827 Road To The 3rd Building (数学)
题意:给出n个元素的序列s,1 ≤ i ≤ j ≤ n,i、j任意,求下列式子期望。题解:数学总的情况为(1+n)*n/2。考虑相同长度区间,Sk的和有规律。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue&g原创 2020-08-06 22:13:15 · 310 阅读 · 0 评论 -
2020牛客多校六 J. Josephus Transform (线段树求约瑟夫变换+置换群的幂)
题意:给出一个长度为 n 的排列,初始序列为 1 , 2 , 3 … , n。有 m 次操作,每次操作表示为 ( k , x ) ,即进行 x 次 k-约瑟夫变换(一次k变换表示取出的顺序),求最终排列。题解:线段树求约瑟夫变换+置换群的幂参考的大佬博客对于每一次操作,我们只要求出一次k-约瑟夫变换,x次的话就是该置换的x次幂,O(n)求一下即可。如何求一次的k-约瑟夫变换呢?pos = (pos - 1 + k - 1) % cnt + 1; 求得取出元素在剩余序列的位置,然后在线段树中查询,查询原创 2020-07-31 23:41:22 · 259 阅读 · 0 评论 -
2020牛客多校三 F. Fraction Construction Problem (扩展欧几里得)
题意:题解:扩展欧几里得d < b, f < b, c > 0, e > 0分三种情况:①a、b不互质,求得公因子g,那么一定有a+gb−gb=ab\frac{a+g}{b}-\frac{g}{b}=\frac{a}{b}ba+g−bg=ba。(剩余情况ab\frac{a}{b}ba一定是最简分式)②b的相异质因子不超过1个,无解。给出题解证明:③b的相异质因子超过1。我们可得cf−dedf=ab\frac{cf-de}{df}=\frac{a}{b}d原创 2020-07-20 22:53:57 · 276 阅读 · 0 评论 -
2020牛客多校一 J. Easy Integration (数学)
题意:给出n,求下列该式值。题解:数学一开始想化简,没化出来,开始找规律,发现他们的分子就是一个杨辉三角形,可以用组合数求,但复杂度实在太大。但我们计算一下结果,发现是有规律可寻的:n=1:16=12∗3\frac{1}{6}=\frac{1}{2*3}61=2∗31n=2:260=23∗4∗5\frac{2}{60}=\frac{2}{3*4*5}602=3∗4∗52n=3:6840=64∗5∗6∗7\frac{6}{840}=\frac{6}{4*5*6*7}8406=4∗5∗6原创 2020-07-17 16:41:42 · 316 阅读 · 0 评论 -
HDU 5794 A Simple Chess (容斥+lucas)
题意:象棋中的“马”初始位置在(1,1),现在要走到(n,m),问有几种走法。棋盘上有r个障碍物,障碍不能走,并规定只能走右上方。题解:容斥+lucas求组合数我们先模拟一下马的走法: (1,1)原创 2020-07-15 21:53:51 · 155 阅读 · 0 评论 -
CodeForces 1372B Omkar and Last Class of Math (数学+贪心)
题意:给出一个n,求满足a+b=n且lcm(a, b)最小。题解:思维a+b=n且lcm(a, b)最小,那么a和b一定要满足倍数关系,且lcm=max(a, b)要尽可能小。若为偶数,a=b=n/2,这肯定让lcm最小。若为奇数,我们只要找到n的除1外的最小质因子x,a=n/x,b=n-a。因为这样算出的a肯定不超过n/2,也就不超过b,所以max(a, b)=b,且a是尽可能大的,那么max(a, b)=b会尽可能小,这也就满足了我们一开始设置的条件。至于倍数关系,其实我们把n分成了x份,a占原创 2020-07-13 13:06:54 · 253 阅读 · 0 评论 -
CodeForces 1371B Magical Calendar (数学)
题意:n表示需要连接在一起的天数,r表示每周可以有的最大天数,即每周天数可以为k(1 < k < r)。以自己定义的每周天数制成(方格表)日历,即每行只能有k个格子,且在日历上将连续的天数涂色(涂色的图形必须是一个整体),求涂色部分可以构成的不同图形个数。题解:数学① n > r显而易见,ans = 1 + 2 + … + r② n ≤ r那么每周天数最多就是n,再往后就是重复的了,k < n时,跟①一样;当k = n时,能构造的整体图形只有一个,ans = 1 + 2 +原创 2020-07-02 11:33:51 · 308 阅读 · 0 评论 -
CodeForces 1371A Magical Sticks (数学)
题意:n个木棒,每个木棒对应1-n的长度,求将木棒进行组合连接,最多能获得多少相同长度的木棒。题解:数学(n+1)/ 2#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue>#include<stack&原创 2020-07-02 10:46:27 · 349 阅读 · 0 评论 -
HDU 4686 Arc of Dream (矩阵快速幂)
题意:An Arc of Dream is a curve defined by following function:wherea 0 = A0a i = a i-1 * AX+AYb 0 = B0b i = b i-1 * BX+BY给出n,A0,AX,AY,B0,BX,BY,What is the value of AoD(N) modulo 1,000,000,007?题解原创 2020-07-01 18:38:39 · 193 阅读 · 0 评论 -
HDU 4549 M斐波那契数列 (矩阵快速幂+费马小定理)
题意:F[0] = a,F[1] = b,F[n] = F[n-1] * F[n-2] ( n > 1 ),现在给出a, b, n,你能求出F[n]的值吗?题解:矩阵快速幂+费马小定理我们可以用矩阵表示a和b指数的转移,即转移矩阵为T=[1110]T= \left[ \begin{matrix} 1 & 1 \\ 1 & 0 \\ \end{matrix} \right]T=[1110]初始矩阵为ma=[0(Fi−1中a的指数)1(Fi−1中原创 2020-07-01 17:06:22 · 158 阅读 · 0 评论 -
HDU 4565 So Easy! (矩阵快速幂+向上取整)
题意:给出正整数a,b,n,m,求下列式子结果。(0< a, m < 215, (a-1)2< b < a2, 0 < b, n < 231)题解:矩阵快速幂+向上取整我们可以发现(a+b)n(a+\sqrt{b})^n(a+b)n最终可以化为A+BbA+B\sqrt{b}A+Bb,其中AAA、BBB均为正整数,所以我们只要求AAA、BBB:Ai+Bib=(Ai−1+Bi−1b)∗(a+b)A_{i}+B_{i}\sqrt{b}=(A_{i-1}+B_{i-原创 2020-07-01 15:59:25 · 257 阅读 · 0 评论 -
HDU 4965 Fast Matrix Calculation (矩阵快速幂)
题意:A为N * K的矩阵,B为K * N的矩阵,执行一下步骤。(N1000, K6)Step 1: Calculate a new N * N matrix C = A*B.Step 2: Calculate M = C^(N * N).Step 3: For each element x in M, calculate x % 6. All the remainders form a new matrix M’.Step 4: Calculate the sum of all the eleme原创 2020-07-01 11:41:28 · 151 阅读 · 0 评论 -
UVA 11651 Krypton Number System (dp+矩阵快速幂)
题意:给定一个进制base和一个score,问在该进制下有多少数满足下列条件:相邻两个数字不相同,前缀不能为0,所有相邻数字的差的平方和为score,所有数字都是整数。结果取模2^32(unsigned int)。题解:dp+矩阵快速幂令dp[i][j]dp[i][j]dp[i][j]表示满足当前分数为iii最后一个数字是jjj的数字的个数。可以得到状态转移方程:dp[i+dis][j]=∑dp[i][k]dp[i+dis][j]=∑dp[i][k]dp[i+dis][j]=∑dp[i][k],其中d原创 2020-06-30 16:00:50 · 217 阅读 · 0 评论 -
HDU 4990 Reading comprehension (矩阵快速幂)
题意:给出n、m(1~1e9),根据下列程序求ans。 ans=0; for (i = 1; i <= n; i++) { if (i & 1) ans = (ans * 2 + 1) % m; else ans = ans * 2 % m; }题解:矩阵快速幂对于iii为奇数,构造转移矩阵T1T1T1=[2011] \left[ \begin{matrix} 2 & 0 \\ 1 & 1 \\ \原创 2020-06-30 10:42:36 · 126 阅读 · 0 评论 -
HDU 5015 233 Matrix (矩阵快速幂)
题意:有一种矩阵,它的第一行是这样一些数:a 0,0 = 0, a 0,1 = 233,a 0,2 = 2333,a 0,3 = 23333...) 除此之外,在这个矩阵里, 我们有 a i,j = a i-1,j +a i,j-1( i,j ≠ 0).现在给你 a 1,0,a 2,0,...,a n,0, 你能告诉我a n,m 是多少吗?·题解:矩阵快速幂我们可以令左上角为23,那么可以推得下一列...原创 2020-06-29 12:16:28 · 139 阅读 · 0 评论 -
CodeForces 450B Jzzhu and Sequences (矩阵快速幂)
题意:给出x,y,n,求fn。题解:矩阵快速幂将式子变形:fffi+1 = fffi − fffi−1我们可以得到转移矩阵:[11−10] \left[ \begin{matrix} 1 & 1 \\ -1 & 0 \\ \end{matrix} \right][1−110]初始矩阵fff2就是{y, x}。然后对n=1特判即可。#define _CRT_SECURE_NO_WARNINGS#include<iostream>原创 2020-06-29 11:02:37 · 159 阅读 · 0 评论 -
CodeForces 475D CGCDSSQ (暴力+数学)
题意:给出一串序列,q个查询,每次给出一个数x,求有多少连续子区间的gcd=x。题解:暴力+数学首先明确,对于一个向右扩充的区间,其gcd只会递减。暴力枚举区间,肯定超时,我们引入nx[]nx[]nx[]数组,记录相同gcd区间之后的下标,当枚举到区间gcd改变时,更新nx[]nx[]nx[],并用map记录相同gcd个数。具体见代码。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#in原创 2020-06-15 17:54:30 · 280 阅读 · 0 评论 -
POJ 2116 Death to Binary? (斐波那契+模拟)
题意:给出两个01串,每个位的权重是斐波那契值,要求相加后的结果,并将它们都转化为不存在连续1的字符串。题解:斐波那契+模拟预处理斐波那契数列,然后将原串转化为十进制numnumnum。接下来考虑如何转化。已知原串位数不超过40位,可以知道上限为f[41]f[41]f[41],从上限往下遍历,若numnumnum≥f[i]f[i]f[i],减去即可,这样就不会出现连续1,推一推就知道了。#define _CRT_SECURE_NO_WARNINGS#include<iostream>原创 2020-05-21 10:48:20 · 238 阅读 · 1 评论 -
POJ 2115 C Looooops (扩展欧几里得)
题意:找一个最小的x,使得 (A+C∗x)%2k = B题解:扩展欧几里得原式可以化为 (C∗x)%2k=B−A,即C*x+2k *y = B-A。(x、y未知)另gcd(C, 2k) = d,可以得C*x*d/(B-A) + 2^k*y*d/(B-A) = d,用扩展欧几里得解即可。orz,服了,re半天,结果是mod没有开long long…#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio&g原创 2020-05-17 17:19:39 · 163 阅读 · 0 评论 -
POJ 1061 青蛙的约会 (扩展欧几里得)
题意:青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。题解:扩展欧几里得(x+mt)%L = (y+nt)%L,即x-y = (n-m)* t+L*k。(t、K未知)另gcd(n-m, L) = d,可得d = (n-m) * [t*d/(x-y)] + L*原创 2020-05-17 15:58:41 · 241 阅读 · 0 评论 -
UVA 11426 GCD - Extreme (II) (欧拉函数)
题意:给出n,求下列值。题解:欧拉函数gcd(n, m) = i 的个数为p[m / i] (n≤m),令f(m)=i * p[m / i],将1~n的f(i)累加即可,这里预处理一下,查询直接O(1)。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm&g原创 2020-05-17 10:26:31 · 180 阅读 · 0 评论 -
LightOJ 1138 Trailing Zeroes (III) (数学+二分)
题意:给出数字,代表某个数的阶乘末尾连续0的个数,求出这个数最小是多少。题解:数学+二分0的个数显然只跟2、5有关,2很多可以忽略。判断多少个5即可。对于125!=… (1 * 5)…(2 * 5)…(3 * 5)…(25 * 5) (此时未完全分解为质因数),这时得到25个5,当然还得到了25!,循环即可。然后二分找。注意右区间大小。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>原创 2020-05-16 22:58:02 · 179 阅读 · 0 评论 -
LightOJ 1197 Help Hanzo (大区间素数筛)
题意:求区间素数个数。题解:大区间素数筛#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue>#include<stack>#include<cmath>#include<vec原创 2020-05-16 22:45:23 · 132 阅读 · 0 评论 -
LightOJ 1213 Fantasy of a Summation (排列组合)
题意:求下列程序结果。 int res = 0; for( i1 = 0; i1 < n; i1++ ) { for( i2 = 0; i2 < n; i2++ ) { for( i3 = 0; i3 < n; i3++ ) { ... for( iK = 0; iK < n; iK++ ) {原创 2020-05-16 22:27:04 · 130 阅读 · 0 评论 -
LightOJ 1214 Large Division (数学)
题意:判断a是否能除b。题解:数学大数,转字符串,循环取余即可。注意判断前置符号#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue>#include<stack>#include<cma原创 2020-05-16 22:09:56 · 232 阅读 · 0 评论 -
LightOJ 1220 Mysterious Bacteria (唯一分解定理)
题意:给你一个x,求满足x=a^p这个式子的最大的p题解:唯一分解定理要使p最大,那么a必然最小,根据因子公式可得a为所有素因子的gcd。注意判断正负,对于负数p必然是奇数,循环右移即可。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#incl原创 2020-05-16 22:06:23 · 196 阅读 · 0 评论 -
LightOJ 1234 Harmonic Number (打表)
题意:给出n,求Σ(1/i)。题解:打表每隔50打个表。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue>#include<stack>#include<cmath>#inclu原创 2020-05-16 21:36:27 · 145 阅读 · 0 评论 -
LightOJ 1236 Pairs Forming LCM (唯一分解定理)
题意:求 (i, j) 的组数,使得 lcm(i, j) = n (i ≤ j)。题解:唯一分解定理对于因子公式 n = p1e1* p2e2*…*pmem ,要使得lcm(i, j) = n,那么a与b中,对于pi的指数,至少应有一个是等于ei的。那么对于一个因子,个数就是2 *ei + 1,遍历所有因子,乘起来即可。注意i ≤ j,那么除了(n, n)之外其他组都出现两次。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#inc原创 2020-05-16 21:31:17 · 166 阅读 · 0 评论 -
LightOJ 1245 Harmonic Number (II) (数学)
题意:求f(n)=n/1+n/2…n/n,其中n/i保留整数。题解:数学对于n/i到n/(i+1),结果都是i,累加即可。注意判断sqrt(n)的边界问题。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue>原创 2020-05-16 21:09:13 · 132 阅读 · 0 评论 -
LightOJ 1259 Goldbach`s Conjecture (素数筛)
题意:给出n,求有几组能将n表示为两素数和的方法。题解:素数筛wa了无数次给我整蒙了,数组大小太难把控了,vector无敌好吧。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue>#include<st原创 2020-05-16 20:54:05 · 144 阅读 · 0 评论 -
LightOJ 1282 Leading and Trailing (数学)
题意:给出nk,求前三位和后三位。题解:数学后三位很好求,快速幂取模即可,注意位数,输出用%.3d。接下来考虑前三位。对于n,可以表示为10a,a可以为小数,a=lg(n)。那么nk = 10ak ,指数ak有整数和小数两个部分,整数决定位数,小数决定具体数字#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstri原创 2020-05-16 17:59:18 · 209 阅读 · 0 评论 -
LightOJ 1336 Sigma Function (算术基本定理)
题意:求1~n内约数和为偶数的数量。题解:算术基本定理求出和为奇数的数量(根号n+根号(n/2)),用n减去即可。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue>#include<stack>原创 2020-05-16 17:15:57 · 208 阅读 · 0 评论 -
LightOJ 1341 Aladdin and the Flying Carpet (唯一分解定理)
题意:给出长方形的面积a和边的下限b,求多少可行解。题解:唯一分解定理这里的a是1e12,明显很大,直接暴力处理不行。先处理a的所有因子数,暴力[1, b),减去即可。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<que原创 2020-05-16 17:04:15 · 193 阅读 · 0 评论 -
LightOJ 1356 Prime Independence (素数+二分图)
题意:选出一个最大子集,其中任意两个数a、b不能满足a=素数*b。题解:素数+二分图最大独立子集问题。先将所有素数存进vv,再对所有数的素数倍数建边。建双边,建边的时候用编号,即每个数与集合中它的素数倍建双边,最后除以2即是最大匹配,再用n减去就是最大独立子集。注意用HK,不然tle。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#inc原创 2020-05-16 16:51:51 · 228 阅读 · 0 评论 -
UVA 11916 Emoogle Grid (BSGS)
题意:原问题是有M*N个方格,K种颜色,有B个方格不能涂色,且垂直相连的两个方格不能涂同一种颜色。问有多少种涂色方案。现在问题改为已知N,K,B以及原问题的结果r求最小的可能的M。题解:BSGS首先考虑没有不能涂色的方格的情况,那么第一行的每一个方格都可以任意涂色,就是kn,而剩余的方格除了对应的上一行的颜色都可以随意填,(k - 1)^(n * m - n),两式相乘就是答案。当出现了不能...原创 2020-05-05 22:34:28 · 178 阅读 · 0 评论 -
LightOJ 1370 Bi-shoe and Phi-shoe (欧拉函数)
题意:n个数,对于每个数,找到一个最小的x,使得他的欧拉函数值大于等于这个数,输出所有x之和。题解:欧拉函数求解每个数的欧拉函数即可,然后遍历看欧拉值是否满足(两个月前写的代码,不知道为什么用了线段树…)。或者不用求欧拉函数,根据性质:对于φ(n),如果n是质数,φ(n) = n - 1,遍历找到第一个质数即为答案。#define _CRT_SECURE_NO_WARNINGS#incl...原创 2020-05-05 17:17:18 · 156 阅读 · 0 评论 -
UVA 11754 Code Feat (中国剩余定理+枚举)
题意:对于C个条件,每个条件都有X和k个y,找出N,使得N对于每个条件,都有N%X == 某一个y,然后以递增次序输出S个满足的N。Input consists of several test cases. Each test case starts with a line containing C, the number of clues(1 ≤ C ≤ 9), and S, the num...原创 2020-05-05 16:29:25 · 257 阅读 · 1 评论