自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

在人间贩卖声音

等凑够满天星辰,放烟花给你看。

  • 博客(667)
  • 收藏
  • 关注

原创 树链剖分【模板】

目录前言原题概念Part OnePart TowPart Three时间复杂度Code前言首先,在学树链剖分之前要先把 LCA、树形DP、DFS序 这三个知识点学了还有必备的 链式前向星、线段树 也要先学了。树链剖分 就是对一棵树分成几条链,把树形变为线性,减少处理难度需要处理的问题都有:将树从x到y结点最短路径上所有节点的值都加上z求树从x到y结点最短路径上所有节点的值之和将以x为根节点的子树内所有节点值都加上z求以x为根节点的子树内所有节点值之和原题》》题目概念思

2021-07-21 21:18:40 236 2

原创 乘法逆元【解法大全】

目录定义模板题法一法二法三应用定义若a∗x≡1(mod  p)a*x≡1 (mod\;p)a∗x≡1(modp),且 aaa 与 ppp 互质,那么我们就能定义: xxx 为 aaa 的逆元,记为 a−1a^{-1}a−1,所以我们也可以称 xxx 为 aaa 的倒数( modmodmod ppp 意义下)。所以对于 ab   mod  p\frac{a}{b}\ \; mod\;pba​ modp ,我们就可以求出 b 在 mod  pmod\; pmodp意义下的逆元,然后乘上

2021-07-20 20:21:13 1142 2

原创 扩展欧几里得

目录前言基本问题关于同余关于逆元其他前言什么是快乐星球?什么时候欧几里得??扩欧即是扩展欧几里得,是欧几里得算法的扩展算法。欧几里得算法是蛤?就是小学学过的辗转相除法。用于计算两个整数a,b的最大公约数。code:int gcd(int a,int b){ if(b==0)return a; return (b,a%b);}基本问题求解 ax+by=cax+by=cax+by=c 的所有整数解(a,b,ca,b,ca,b,c 都为整数)首先:要保证有整数解就必须有:gcd(

2021-07-20 20:02:37 450 1

原创 欧拉φ函数

定义111~ NNN中与 N 互质的数的个数叫欧拉函数,记为φ(N)φ ( N )φ(N)。对 N 分解质因数N=p1c1∗p1c1∗...∗pkckN=p_1^{c_1}*p_1^{c_1}*...*p_k^{c_k}N=p1c1​​∗p1c1​​∗...∗pkck​​则有 φ(N)=N∗(1−1p1)∗(1−1p2)∗...∗(1−1pk)\varphi(N)=N*(1-\frac{1}{p_1})*(1-\frac{1}{p_2})*...*(1-\frac{1}{p_k})φ(N)=N∗(1−

2021-07-19 17:27:27 249

原创 未完成任务(~ - ~)

模拟赛2020年8月23日提高组——捡金子2020年8月23日提高组——魔术算法——练习题洛谷 P3258P3258P3258 ——(RMQRMQRMQ&LCALCALCA)洛谷 P6374P6374P6374 ——(RMQRMQRMQ&LCALCALCA)洛谷 P3398P3398P3398 ——(RMQRMQRMQ&LCALCALCA)洛谷 P2880P2880P2880 ——(RMQRMQRMQ&LCALCALCA)SSLSSLSSL 28732

2020-08-24 16:25:31 233 3

原创 【洛古 P1039 】[NOIP2003 提高组] 侦探推理

2023-01-15 20:33:51 462 1

原创 【洛古 P8815】[CSP-J 2022] 逻辑表达式

2023-01-15 17:29:26 425

原创 【洛古 P1175】表达式的转换

2023-01-15 17:10:27 384

原创 【洛古 P1315】 [NOIP2011 提高组] 观光公交

2023-01-15 15:06:33 116

原创 【洛古 P1314】[NOIP2011 提高组] 聪明的质监员

2023-01-15 14:49:22 220

原创 【洛谷 P1970】 [NOIP2013 提高组] 花匠

2023-01-14 17:36:48 155

原创 【洛谷 P1979】[NOIP2013 提高组] 华容道

2023-01-14 17:13:12 113

原创 【2022.1.21 洛谷 月赛 II】A 质因数

解题思路我们发现质因数越小,a_i会越大,就越优,则以2为质因数是最好的,所以当当前数只有2一个质因数,或质因数只有2,3且只有一个三,就不会有f(m)>f(n)f(m)>f(n)f(m)>f(n)的情况,其余都有代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include&lt...

2022-01-21 16:58:45 381

原创 【Codeforces Round #166 (Div. 2)】D. Good Substrings【哈希】

解题思路以b的个数为关键字,做一个前缀和,然后枚举区间左右端点,i,j,a[j]-a[i-1]如果<=k,说明这段字符是合法的,但是考虑到要求重,要先做一个哈希预处理base[0]=1ll; for(int i=1;i<=len;i++) { h[i]=(h[i-1]*p*1ll+(s[i]-'a'+1ll)); base[i]=(base[i-1]*p*1ll); }然后当前字符串的哈希值就是x=h[j]−h[i−1]∗base[j−i+1];x=h[j]-h[i-...

2022-01-21 14:57:00 113

原创 【牛客练习赛95】Non-interger Area【数学】

解题思路考虑当我们用叉积计算面积的时候,会以坐标轴上的一个点作为原点,在剩下的点中再枚举两个点,计算他们以原点的叉积。打过叉积的人会发现,这样算出来的一定是质数,但是是一个四边形的面积,则当他是偶数时,我们/2求出的三角形面积会是一个小数,与题意符合。所以我们得出,叉积等于奇数时,面积是小数,回忆一下乘法奇偶性,我们需要一个横纵坐标奇偶性相反的(即一奇一偶),还需要一个横纵坐标都是奇数的。我们把所有的点按照奇偶性归类,前奇后偶的个数为x,两个偶数个数为y,两个奇数个数为z,前偶后奇个数为k。我们...

2022-01-21 14:51:22 433

原创 【Poj 3348】Cows【凸包】

解题思路凸包模板题,算出所有点后用叉积计算面积,答案/2/50就好了代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<map>#define ll long long#define db doubleusing namespace std;int n,cnt;db..

2022-01-20 22:09:22 221

原创 【洛谷 P2742】 圈奶牛Fencing the Cows 【模板】【凸包】

解题思路极角:纵坐标比横坐标y1/x1y1/x1y1/x1 与 y2/x2y2/x2y2/x2比较 即p0p1p2p0p1p2p0p1p2的叉积x1∗y2−x2∗y1x1*y2-x2*y1x1∗y2−x2∗y1的正负来判断极解的大小。详解见 凸包代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#i..

2022-01-20 22:06:48 257

原创 【POJ 3304】Segments【计算几何】

解题思路题意:在一个平面上,给你n个线段,问是否存在一条直线,使得将这些线段投影到上面之后,所有投影线段至少有一个共同点。PS:投影就是线段的两个端点向直线作垂线所包含的区域。我们可以把题意转换一下,投影有一个公共的交点就相当于有一条与那条直线的垂直的直线必过所有线段。然后我们就去找是否有一条直线与所有线段相交就好了。考虑这样的直线不止一条,且它通过平移,旋转,肯定会与线段的端点相交。两点确定一条直线,我们枚举两个线段的端点作为直线,判断是否存在一条这样的直线与所有线段都相交就好了。PS:判断..

2022-01-20 12:04:45 114

原创 【POJ 1127】Jack Straws【计算几何】

解题思路题意:给出 n 条线段端点的坐标,然后给出若干组询问。每组询问包含两个数字,输出这两个数字代表的线段是否联通。线段从 1 到 n 编号。通过联通的线段间接连在一起的线段,认为这两条线段也是联通的。直接枚举所有线段,判断两辆是否相交,然后用Floyed传递闭包处理间接相连的情况。最后O(1)判断是否联通就好代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath...

2022-01-20 11:56:51 123

原创 【POJ 1066】Treasure Hunt【计算几何】

解题思路题意:在一个矩形区域内,有n条线段,线段的端点是在矩形边上的,有一个特殊点,问从这个点到矩形边的最少经过的线段条数最少的书目,穿越只能在中点穿越。根据myc巨爷所言,枚举每道墙的端点和p的连线,则这条线段和墙的交点的次数最小值即为需要炸墙的最小次数。记得最外面的四个顶点也算做端点,还有端点原本所在的那个墙不算,即不考虑共线的情况PS:最后要加1,因为最外围的墙也要炸。代码#include<iostream>#include<cstdio>#include...

2022-01-20 11:51:56 100

原创 【51 Nod】1010 只包含因子2 3 5的数【暴力】

解题思路将1e18之内的所有符合条件的数预处理出来,大概就150000个吧,然后将他们排一个序。输出的时候枚举答案。。代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#define ll long longusing namespace std;con..

2022-01-19 21:25:35 81

原创 【SSL 1409】哈夫曼树(三)【树】

解题思路将输入的每个字母出现的次数当做关键字,构建一个哈夫曼树,然后中序遍历输出字母和哈弗曼编码就好了。代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<map>#define ll long longusing namespace std;string s;map..

2022-01-19 17:11:18 304

原创 【SSL 1408】哈夫曼树(二)【树】

解题思路参考哈夫曼树,这道题要加上一个储存字母的域。带权路径长短:所以我们在中序遍历时,对于每一个叶子,去记录它的深度就好了PS:注意这道题要按子母序输出。(先保存下来,最后按顺序输出)代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<map>#define ll ..

2022-01-19 17:09:00 1665

原创 【SSL 1407】哈夫曼树(一)【树】

哈弗曼编码HuffmanHuffmanHuffman编码是一种无损压缩编码方案。思想:根据源字符出现的(估算)概率对字符编码,概率高的字符使用较短的编码,概率低的字符使用较长的编码,从而使得编码后的字符串长度期望最小。HuffmanHuffmanHuffman是一种贪心算法:每次总选择两个最小概率字符结点合并。称字符出现的次数为频数,则概率等于频数处于字符串总长;因此,频率可以用频数替代。PS:一个文本,统计出A,B,C,D,EA,B,C,D,EA,B,C,D,E,出现次数为15,7,6,6..

2022-01-19 17:02:16 504

原创 关于堆+结构体的重载

关于优先队列的重载:当优先队列/堆中是结构体时,一定要先重新定义运算符或者自己定义一个比较函数。PS:当只有两个关键字的时候,最好用pair,可以自动先比较第一个在比较第二个法一:自己定义一个专门的结构体,用来比较#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<queue>#define ll long longusing n

2022-01-19 16:52:01 316

原创 【51 Nod】3241 小明和他的同学们【堆】

解题思路一开始想过贪心,用 t/吃一个的时间,算出每个人能吃多少个整的,然后发现不行,因为当一个同学拿下一块时,不知道是否还有剩余,要知道谁先拿也很麻烦。所以考虑——暴力吧!直接用一个优先队列模拟同学吃巧克力的过程,把一个pairpairpair丢到小根堆中,第一关键字为吃完这一个所到的时间,第二关键字为小朋友编号,每次取出栈顶toptoptop,若top.first<=t,m−−top.first<=t,m--top.first<=t,m−−,然后把(top.x+a[top....

2022-01-19 16:41:58 470

原创 【一本通 1373】鱼塘钓鱼(fishing)【堆】

解题思路我们枚举最后一个,也就是最右边的鱼塘,则花费的时间就是从第一个鱼塘到这个鱼塘的时间总和,(因为走回头路显然是没意义的)。每次算出以i为最后一个鱼塘还剩的时间,然后把他前面的鱼塘都放进大根堆,每次取出栈顶,也就是能钓到最多鱼的那个,时间减111,一直到时间=0=0=0.PS:每次要清空堆代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#incl..

2022-01-19 16:29:57 1819

原创 【51 Nod 2636】卡车加油【堆】

解题思路枚举距离i,若距离i处有加油站,就把油量加入大根堆。现在需要i个单位的油,判断p(当前有的油量)是否>i,不是就不断弹出栈顶,加入经过的加油站能补充的油量。不够就直接输出-1代码#include<bits/stdc++.h>using namespace std;int n,l,p,ans,v[1000010];struct c{ int x,y;}a[10010];priority_queue<int>q;int main(){ ..

2022-01-18 20:40:31 210

原创 【一本通 1372】小明的账单【堆】

解题思路分别用大根堆和小根堆储存账单,弹出过的标记下来,然后在弹出队头时判断是否已被弹出。代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<vector>#include<algorithm>#include<queue>#define ll long longusing namespace s..

2022-01-18 20:34:26 591

原创 【一本通 1371】看病【堆】

解题思路用STLSTLSTL自带的大根堆存下每个人的优先级,姓名,这里存入pairpairpair就行,第一关键字为优先级。pop时就弹出队头代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<vector>#include<algorithm>#include<queue>#define ll...

2022-01-18 20:28:02 603 1

原创 关于STL——篇2

目录1. map2.setdeque,list,vector对比STL算法1. map介绍:板子:#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<vector>#include<algorithm>#include<map>#define ll long longusing namespace

2022-01-18 11:16:07 433

原创 【Poj 1654】Area【计算几何】【叉积】

解题思路题目大意:一个坐标系,从原点开始走,然后1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走。(看翻译直接无限WA),给出一串包含1-9的字符串,问你这些点所围成的面积把每个数字对应横纵坐标的变化量预处理出来(就像广搜的dx,dy一样)dx[10]= {0,1,1,1,0,0,0,-1,-1,-1},dy[10]= {0,-1,0,1,-1,0,1,-1,0,1};这样我们就能先求出每个点的坐标,而他们又是有序的且一定能...

2022-01-17 18:21:02 110

原创 【51 Nod】连续子段的差异【单调队列】

解题思路构建两个单调队列m1,m2m1,m2m1,m2,分别维护区间[i,j][i,j][i,j]里的最大值和最小值,枚举i作为区间的头,jjj作为一个指针一直向后移动,同时把数分别插入队尾,当m1[h]−m2[h]>km1[h]-m2[h]>km1[h]−m2[h]>k时退出,然后判断队头是否当前区间的头,如果是,就弹出。代码#include<iostream>#include<cstdio>#include<cstring>#inc..

2022-01-17 16:56:21 65

原创 关于STL——篇1

目录STL1. PairvectorSTLSTL大致可以分为3类:容器(container):可容纳各种数据类型的数据结构迭代器(iterator):可依次存取容器中元素的东西算法(algorithm):用来操作容器中元素的函数模板1. Pair——类似于只有两个关键字的结构体优点:排序时自动按第一个关键字先排序,相等时再看第二个关键字。例题解题思路先求出每个字符串的无序度,暴力N2N^2N2求,然后建一个pairpairpair数组qqq,第一关键字存无序度,

2022-01-17 16:46:54 385

原创 【51 Nod】1272 最大距离【单调栈】

解题思路考虑用单调栈做这道题,先将数组按数值从大到小排序(带着原本的坐标排)。注意相同的数坐标大的放前面。然后把新序列的坐标按顺序放进单调栈(单调递增),当新加入的数大于栈顶,就踢出栈顶,同时更新答案 ans=max(ans,st[1]−st[t]);ans=max(ans,st[1]-st[t]);ans=max(ans,st[1]−st[t]);PS:样例5 3 6 3 4 2,排完序的坐标为,3 1 5 4 2 6.其中5>25>25>2,且5−2=35-2=35−2=3..

2022-01-15 14:02:05 96

原创 【POJ 2007】Scrambled Polygon【计算几何】【叉积】

解题思路题意:从第一个点开始逆时针输出组成多边形的点凸包Graham算法求q中y坐标最小的点p0,若具有最小坐标的点有多个,则取最左边的点作为po.对q中剩余的点按逆时针相对p0的极角排序(也就是按极角从小到大排序)打印按逆时针排列的栈中的各顶点这道题已经告诉我们p0就是(0,0)了,就直接做就好了。代码#include<iostream>#include<cstdio>#include<iomanip>#includ...

2022-01-15 13:51:55 146

原创 【POJ 3494】Largest Submatrix of All 1’s【单调栈】

解题思路参照 Largest Rectangle in a Histogram那道题,这道题算是一个升级版,也就是二维的。预处理每一列中每个位置上矩阵的高,记为f,设1为一个单位高度,样例如下图:然后枚举矩阵内每个点,相当于以每一行为低,f[]i[j],为那一位上的高,然后用单调栈算这一行为底能组成的最大的面积代码#include<iostream>#include<cstdio>#include<iomanip>#include<cmath..

2022-01-15 13:35:08 129

原创 【POJ 2007】Scrambled Polygon【单调栈】

解题思路先预处理一个前缀和s[i]做两次单调栈,设m1[i]m1[i]m1[i]表示以i为最小值向左碰到的第一个最小值,m2[i]m2[i]m2[i]表示以i为最小值向右碰到的第一个最小值。做两次单调栈分别算出m1,m2m1,m2m1,m2,则点i的最大贡献为(s[m1[i]−1]−s[m2[i]])∗a[i].(s[m1[i]-1]-s[m2[i]])*a[i].(s[m1[i]−1]−s[m2[i]])∗a[i].,取maxmaxmax就好了。注意一下细节,具体看代码代码#includ...

2022-01-15 12:58:03 52

原创 【SSL 1213】多边形面积(difficult)【计算几何】【叉积】

解题思路这道题就是 多边形面积 与 判断线段相交的综合题:先对于每一条边判断除了他本身和相连的前后两条边是否还与其它的边相交,是就输出impossible,注意n,1那条边不要漏了。PS:特判边数<=2,无法组成多边形的情况。还有面积算完记得加绝对值和除以2代码#include<iostream>#include<cstdio>#include<iomanip>#include<cmath>#include<cstring...

2022-01-15 09:29:47 133

原创 【洛谷 P2785】 物理1(phsic1)- 磁通量【计算几何】【叉积】

解题思路关于计算多边形面积,可以用叉积,因为叉积的几何意义就是一个四边形的面积。设矢量P=(x1,y1),Q=(x2,y2)P = ( x1, y1 ),Q = ( x2, y2 )P=(x1,y1),Q=(x2,y2),叉积为:P×Q=x1∗y2−x2∗y1P × Q = x1*y2 - x2*y1P×Q=x1∗y2−x2∗y1,其结果是一个标量,叉积的绝对值是一个平行四边形面积$还有一个非常重要性质是:叉积可以通过它的符号(正负)判断两矢量相互之间的顺逆时针关系即:若 P×Q>0P...

2022-01-15 08:46:40 280

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除