![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数学
文章平均质量分 51
数学
幽影相随
这个作者很懒,什么都没留下…
展开
-
洛谷 P4717 【模板】快速沃尔什变换 (FWT)
FWTFWT是用于解决对下标进行位运算卷积问题的方法。公式:Ci=∑j⊕k=iAj×BkC_i =\sum_{j ⊕ k = i} {A_j × B_k}Ci=j⊕k=i∑Aj×BkP4717 【模板】快速沃尔什变换 (FWT)题目:给定长度为 2n 的两个序列 A,B 设Ci=∑j⊕k=iAj×BkC_i =\sum_{j ⊕ k = i} {A_j × B_k}Ci=j⊕k=i∑Aj×Bk分别当 ⊕ 是 or,and,xor 时求出 C输入格式:第一行一个数n。第二行转载 2020-07-13 23:18:31 · 149 阅读 · 0 评论 -
51nod 1616 最小集合(数论)
1616 最小集合A君有一个集合。这个集合有个神奇的性质。若X,Y属于该集合,那么X与Y的最大公因数也属于该集合。但是他忘了这个集合中原先有哪些数字。不过幸运的是,他记起了其中n个数字。当然,或许会因为过度紧张,他记起来的数字可能会重复。他想还原原先的集合。他知道这是不可能的……现在他想知道的是,原先这个集合中至少存在多少数。样例解释:该集合中一定存在的是{1,2,3,4,6}输入第一行一个数n(1<=n<=100000)。第二行n个数,ai(1<=ai<转载 2021-01-25 11:33:03 · 169 阅读 · 1 评论 -
博弈论
尼姆博弈题型尼姆博弈模型:有3堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取1个,多者不限,最后取光者得胜。分析首先自己想一下,就会发现只要最后剩两堆物品一样多(不为零),第三堆为零,那面对这种局势的一方就必败。那我们用(a,b,c)表示某种局势,首先(0,0,0)显然是必败态,无论谁面对(0,0,0) ,都必然失败;第二种必败态是(0,n,n),自己在某一堆拿走k(k ≤ n)个物品,不论k为多少,对方只要在另一堆拿走k个物品,最后自己都将面临(0,0,0)的局势,必败。仔细分原创 2021-01-22 13:14:12 · 960 阅读 · 0 评论 -
51nod 1677 treecnt(树形 dp,逆元,贡献)
1677 treecnt给定一棵n个节点的树,从1到n标号。选择k个点,你需要选择一些边使得这k个点通过选择的边联通,目标是使得选择的边数最少。现需要计算对于所有选择k个点的情况最小选择边数的总和为多少。样例解释:一共有三种可能:(下列配图蓝色点表示选择的点,红色边表示最优方案中的边)选择点{1,2}:至少要选择第一条边使得1和2联通。选择点{1,3}:至少要选择第二条边使得1和3联通。选择点{2,3}:两条边都要选择才能使2和3联通。输入第一行两个数n,k(1<=k<=原创 2020-12-25 11:13:33 · 110 阅读 · 0 评论 -
51nod 1685 第K大区间2(树状数组,逆序对)
1685 第K大区间2定义一个长度为奇数的区间的值为其所包含的的元素的中位数。中位数_百度百科现给出n个数的序列a,求将所有长度为奇数的区间的值排序后,第K大的值为多少。样例解释:[l,r]表示区间的值[1]:3[2]:1[3]:2[4]:4[1,3]:2[2,4]:2第三大是2输入第一行两个数n和k(1<=n<=100000,k<=奇数区间的数量)第二行n个数,0<=ai<2^31输出一个数表示答案。输入样例4 33 1 2 4输出样例转载 2020-12-21 22:30:42 · 189 阅读 · 0 评论 -
逆序对模板
逆序对摘自百度并进行了部分修改。归并排序#include <bits/stdc++.h>using namespace std;// [l, r)void merge_inversion(vector<int> &nums, int l, int r, int &cnt) { cout << l << " - " << r << endl; // 只有一个元素直接返回 if (r原创 2020-12-21 21:52:59 · 56 阅读 · 0 评论 -
51nod 1033 骨牌覆盖 V2(矩阵快速幂、状压dp)
1033 骨牌覆盖 V2在mn的一个长方形方格中,用一个12的骨牌排满方格。问有多少种不同的排列方法。(n <= 5)例如:3 * 2的方格,共有3种不同的排法。(由于方案的数量巨大,只输出 Mod 10^9 + 7 的结果)输入2个数M N,中间用空格分隔(2 <= m <= 10^9,2 <= n <= 5)输出输出数量 Mod 10^9 + 7输入样例2 3输出样例3题解在一行中,最多有5个空格,两种状态,即竖着放一个骨牌,或横着放一个骨牌,最多原创 2020-11-30 23:20:34 · 261 阅读 · 0 评论 -
51nod 1556 计算(默慈金数)
默慈金数部分摘自百度文库默慈金数是在数学中,一个给定的数n的默慈金数是“在一个圆上的n个点间,画出彼此不相交的弦的全部方法的总数”。也可以想象成在一个“网格”上,若限定每步只能向右移动一格(可以向右上、向右下、向右),并禁止移动到 y = 0 以下的地方”,则以这种走法用 n 步从 (0,0) 移动至 (n,0) 的可能形成的路径的总数为 n 的默慈金数。前几个默慈金数1, 2, 4, 9, 21, 51, 127, 323, 835, 2188, 5798, 15511, 41835, 1136原创 2020-11-26 19:52:06 · 142 阅读 · 0 评论 -
51nod1225 余数之和(分块)
1225 余数之和1.0 秒 131,072.0 KB 80 分 5级题F(n) = (n % 1) + (n % 2) + (n % 3) + … (n % n)。其中%表示Mod,也就是余数。例如F(6) = 6 % 1 + 6 % 2 + 6 % 3 + 6 % 4 + 6 % 5 + 6 % 6 = 0 + 0 + 0 + 2 + 1 + 0 = 3。给出n,计算F(n), 由于结果很大,输出Mod 1000000007的结果即可。输入输入1个数N(2 <= N <= 10^原创 2020-10-19 23:13:32 · 85 阅读 · 0 评论 -
皮克定理
皮克定理计算顶点坐标均是整点(或正方形格点)的简单多边形内的整点数。s = l / 2 + n - 1s:三角形中包括边上整点的个数l:边上的整点n:三角形内部的点的个数三角形#include <iostream>#include <cstdio>#include <cmath>#include <cstdlib>#define ll long longusing namespace std;ll a, b, c, d, e, f原创 2020-10-15 19:45:42 · 403 阅读 · 0 评论 -
Angle Beats(计算几何,极角排序)
Angle BeatsGiven n points P1,P2,⋯,Pn on 2D plane and q queries. In i-th query, a point Ai is given, and you should determine the number of tuples (u,v) that 1≤u<v≤n and Ai,Pu,Pv form a non-degenerate right-angled triangle.InputThe first line contains原创 2020-10-02 19:04:11 · 342 阅读 · 0 评论 -
51nod 1282 时钟(最小表示法,hash)
最小表示法有一个首位相连的字符串,寻找一个位置,从这个位置向后形成一个新字符串,使这个字符串字典序最小。// 返回最小表示法的始端int get_min(int *s, int len){ int i = 0, j = 1, k = 0; while (i < len && j < len && k < len) { int t = s[(i + k) % len] - s[(j + k) % len];原创 2020-09-04 18:29:54 · 127 阅读 · 0 评论 -
康托展开
康托展开概念:康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩。设有n个数(1,2,3,4,…,n),可以有组成不同( n! 种)的排列组合,康托展开表示的就是是当前排列组合在n个不同元素的全排列中的名次。原理:X = a[n] * (n-1)! + a[n-1] * (n-2)! + … + a[i] * (i-1)! + … + a[1] * 0!简述:从第...原创 2019-07-23 10:29:41 · 1117 阅读 · 0 评论 -
Eight (康托展开、BFS )
Eight涉及 康托展开 及 BFS整的有点懵,参考了别人的代码,搞了好久#include <iostream>#include <string>#include <queue>#include <vector>#include <algorithm>#include <cstring>using names...原创 2019-07-23 13:18:21 · 1173 阅读 · 0 评论 -
1e11内质数的个数
#include<cstdio>#include<cmath>using namespace std;#define LL long longconst int N = 5e6 + 2;bool np[N];int prime[N], pi[N];int getprime() { int cnt = 0; np[0] = np[1] = true; pi[0] = pi[1] = 0; for (int i = 2; i < N原创 2020-09-27 14:51:36 · 850 阅读 · 1 评论 -
51nod 1441 士兵的数字游戏(埃氏筛)
1441 士兵的数字游戏题目两个士兵正在玩一个游戏,游戏开始的时候,第一个士兵为第二个士兵选一个正整数n。然后第二个士兵要玩尽可能多的轮数。每一轮要选择一个正整数x>1,且n要是x的倍数,然后用n/x去代替n。当n变成1的时候,游戏就结束了,第二个士兵所得的分数就是他玩游戏的轮数。为了使游戏更加有趣,第一个士兵用 a! / b! 来表示n。k!表示把所有1到k的数字乘起来。那么第二个士兵所能得到的最大分数是多少呢?输入单组测试数据。第一行包含一个整数t (1 ≤ t ≤ 1,000,00原创 2020-09-06 10:55:45 · 289 阅读 · 1 评论 -
1120 机器人走方格 V3(卡特兰数、lucas)
1120 机器人走方格 V3N * N的方格,从左上到右下画一条线。一个机器人从左上走到右下,只能向右或向下走。并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果。输入输入一个数N(2 <= N <= 10^9)。输出输出走法的数量 Mod 10007。输入样例4输出样例10#include <cstdio>#include <iostream>#include <c原创 2020-08-30 11:50:03 · 209 阅读 · 0 评论 -
组合数模板(存在 mod)
const int maxn = 1e7 + 10;const int mod = 1e9 + 7;ll mul[maxn];ll inv[maxn];void init() { mul[0] = 1; for (int i = 1; i < maxn; i++) { mul[i] = (mul[i - 1] * i) % mod; } ...原创 2019-12-05 16:59:02 · 234 阅读 · 0 评论 -
51nod 1180 方格射击游戏(莫比乌斯反演)
莫比乌斯反演令F(n)和f(n)都是定义在非负整数域上的两个函数,并且它们之间满足:F(n)=∑d∣nf(d)F(n) = \sum_{d | n} {f(d)}F(n)=d∣n∑f(d)即:f(n)=∑d∣nμ(d)F(⌊nd⌋)f(n) = \sum_{d | n} {μ(d)F(⌊\frac{n}{d}⌋)}f(n)=d∣n∑μ(d)F(⌊dn⌋)常用:F(n)=∑n∣df(d)F(n) = \sum_{n | d} {f(d)}F(n)=n∣d∑f(d)f(n)=∑n∣dμ(d原创 2020-08-26 20:25:40 · 188 阅读 · 0 评论 -
51nod 1074 约瑟夫环 V2(约瑟夫环、模板)
1074 约瑟夫环 V2题目N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。例如:N = 3,K = 2。2号先出列,然后是1号,最后剩下的是3号。输入2个数N和K,表示N个人,数到K出列。(2 <= N <= 10^18, 2 <= K <= 1000)输出最后剩下的人的编号输入样例3 2输出样例3/* * F(1)=0 * F(2)=F(1)+k * F(i)=F(i-1)+原创 2020-08-24 15:55:18 · 184 阅读 · 0 评论 -
反素数
反素数反素数的定义对于任何正整数 n ,其约数个数记为 f(n),例如,如果某个正整数 n 满足:对任意的正整数 i (0 < i < n),都有 f(i) < f(n),那么称为 n 反素数。性质一个反素数的所有质因子必然是从 2 开始的连续若干个质数,因为反素数是保证约数个数为 x 的这个数 n 尽量小。同样的道理,如果 n = 2t1 × 3t2 × 5t3 × 7t4…,那么必有 t1 > t2 > t3 > t4 …常见问题给定一个数 n,求原创 2020-07-17 15:14:12 · 269 阅读 · 0 评论 -
欧拉函数(数论)
欧拉函数欧拉函数的通式:φ(n)=n*(1-1/p1)(1-1/p2)(1-1/p3)*(1-1/p4)……(1-1/pn)代码实现/* * 小于n且和n互质的正整数(包括1)的个数 */ll eular(ll n){ ll ans = n; for(int i=2; i*i <= n; ++i) { if(n%i == 0) { ans = ans/i*(i-1); while(n原创 2020-05-23 13:44:01 · 220 阅读 · 0 评论 -
Urban Design(计算几何,判断直线与线段是否相交)
Urban DesignA new town is being planned, and the designers have some very specific ideas about how things should be laid out. First, they lay out the streets. Each street is perfectly straight and pa...原创 2020-03-05 23:05:28 · 192 阅读 · 0 评论 -
Beer Barrels(快速幂)
Beer BarrelsFinally, you got into the cellar of your preferred brewery where you expected many large piles ofbeer barrels to be stored. You are eager to inspect the barrels and maybe even their conte...原创 2020-02-26 10:23:59 · 192 阅读 · 0 评论 -
垒骰子(矩阵快速幂)
垒骰子题目描述赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。atm想计算一下有多少种不同的可能的垒骰子方式。两种垒...原创 2020-02-01 20:10:04 · 424 阅读 · 0 评论 -
Raising Modulo Numbers(快速幂)
Raising Modulo Numbers题目#include <iostream>#include <cmath>using namespace std;#define ll long longll mod;ll QuickPow(int x, int N){ ll res = x%mod; ll ans = 1; while(...原创 2019-08-03 13:20:57 · 1097 阅读 · 0 评论 -
快速幂 + 矩阵快速幂(包含Java的大数)
矩阵计算//n为矩阵边长void pro(int l1[][20],int l2[][20],int t[][20]){ memset(t,0,sizeof t); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) t[i][j]=(t[i][j]+l1[i][k]*l2...原创 2019-04-08 23:10:51 · 1173 阅读 · 0 评论 -
水果忍者(数学 叉积)
水果忍者题目2010年风靡全球的“水果忍者”游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹,就可以完成游戏规定的任务。如果玩家可以一刀砍下画面当中一连串的水果,则会有额外的奖励,如图1所示。图 1现在假如你是“水果忍者”游戏的玩家,你要做的一件事情就是,将画面当中的水果一刀砍下。这个问题看上去有...原创 2020-01-30 13:09:06 · 475 阅读 · 0 评论 -
长城(叉乘)
长城题目正如我们所知,中国古代长城的建造是为了抵御外敌入侵。在长城上,建造了许多烽火台。每个烽火台都监视着一个特定的地区范围。一旦某个地区有外敌入侵,值守在对应烽火台上的士兵就会将敌情通报给周围的烽火台,并迅速接力地传递到总部。现在如图1所示,若水平为南北方向、垂直为海拔高度方向,假设长城就是依次相联的一系列线段,而且在此范围内的任一垂直线与这些线段有且仅有唯一的交点。图 1进一步地,...原创 2020-01-26 19:04:01 · 616 阅读 · 0 评论 -
凸包基础
凸包入门用途从一堆结点中,获取构成面积最大的图形所需的顶点。结点定义将结点定义为一个变量,以及可以进行相减运算。代码实现// p[] 输入的点// s[] 外围的点(构成凸包的点)struct point { double x, y; //对减法符号进行重载 point friend operator-(point a, point b) { ...原创 2020-01-26 15:19:47 · 203 阅读 · 0 评论 -
Transmitter(几何:向量积)
Transmitter题目对于一个有多个发射台以相同频率发送信号的无线网络,通常要求信号不交叠,或至少他们不发生冲突。实现的方法之一是限制发射台的覆盖范围,使用只在半圆内发送信号屏蔽的发射器。一个发射台T在一个 1000平方米的网格中,向一个半径为R的半圆形区域发送信号,发射台可向任何方向旋转,但不会移动。给出网格上在任何地方的N个点,请您计算发射台发送的信号可以覆盖的最多的点的数目。下图...原创 2019-08-09 15:07:24 · 1292 阅读 · 0 评论 -
Pseudoprime numbers(快速幂 + 素数)
Pseudoprime numbers题意费马小定理指出,对于任何素数p和任何整数a>1,ap ≡a (mod p)。也就是说,如果a的p次幂除以p,余数是a。一些(但不是很多)非素数值p,如果存在整数a>1使得ap = a (mod p),则称p是以a为基的伪素数。(还有一些数被称为Carmichael数,对于所有满足GCD(a, n)=1的正整数a,都是以a为基的伪素数。)给...原创 2019-08-03 17:14:51 · 1299 阅读 · 0 评论 -
Digit Primes(埃式筛法)
Digit Primes#include <iostream>#include <cstring>#include <algorithm>#include <cmath>using namespace std;#define ll long longconst int maxn=1000005;int vis[maxn],sign[m...转载 2019-08-03 17:04:10 · 1302 阅读 · 0 评论 -
Happy 2006(欧几里得算法)
Happy 2006题意给两个数 m、k,找到第 k 个跟 m 的最大公约数为 1 的数。#include <iostream>#include <cstring>#include <algorithm>#include <cmath>using namespace std;#define ll long longint s[100...原创 2019-08-03 14:57:23 · 1430 阅读 · 0 评论 -
Summation of Four Primes(素数打表)
Summation of Four Primes题意判断一个数能否拆成4个质数,不能输出 “Impossible.”,能则打印出4个数。挺不错的用来练习素数打表的题。#include <iostream>#include <cstring>#include <cmath>using namespace std;#define ll long lo...原创 2019-08-03 14:22:36 · 1385 阅读 · 0 评论 -
素数打表
bool visit[10100000]; int prime[10000000]; //从数组下标 1 开始存void init_prim() { memset(visit, true, sizeof(visit)); int num = 0; for (int i = 2; i <= n; ++i) { ...原创 2019-05-23 10:34:06 · 1093 阅读 · 0 评论 -
Area(几何:向量积:有向面积)
Area题意请您计算一个特殊多边形的面积。这个多边形的一个顶点是直角坐标系的原点。从这个顶点出发,可以一步一个顶点地走向多边形的下一个顶点,直到返回到初始的顶点。每一步可以向北,西,南或东走1单位长度;或向西北,东北,西南或东南走2的平方根单位长度。例如,下图是一个合法的多边形,其面积是2.5:输入输入的第一行给出一个整数t (1≤t≤20),表示测试的多边形的个数。接下来的每一行给出...原创 2019-08-09 16:08:57 · 2539 阅读 · 0 评论 -
Pick-up sticks(几何:向量积,线段相交)
判断线段相交struct point{ double x,y;};struct line{ point p1,p2;}a[100010];//叉乘 double chacheng(point p1,point p2,point p3){ return (p1.x-p3.x)*(p2.y-p3.y)-(p1.y-p3.y)*(p2.x-p3.x);}//判断是否相交 int ...原创 2019-08-09 16:42:35 · 1580 阅读 · 0 评论 -
费马小定理
费马小定理如果p是一个质数,而整数a不是p的倍数,则有a(p-1)≡1 (mod p)。例如:计算 2100除以 13 的余数2100= (212)8 * 24 (mod 13)= 18 * 16 (mod 13)=16 (mod 13)=3 (mod 13)故余数为 3...原创 2019-08-10 09:35:04 · 1541 阅读 · 0 评论 -
求整数n/m的第k位小数(高精度除法)
#include <iostream>#include <cstdio>#include <cmath>using namespace std;#define ll long longll quick(ll a,ll b,ll c){ ll ans=1; a=a%c; while(b>0) { i...原创 2019-08-12 13:52:26 · 1447 阅读 · 0 评论