自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 python的一些小点

python中read函数读取csv文件时第一个单元格的字符出现乱码,可以将csv文件另存为CSV(.csv)格式

2021-11-29 21:32:29 141

原创 分块算法模板

1、分块算法初始化:void build(ll n){ ll block=sqrt(n);//每块个数 ll num=n/block;//总共有几块 if(n%block) num++;//不能整除加1 for(ll i=1;i<=num;i++) { l[i]=(i-1)*block+1;//确定每块的左右点 r[i]=i*block; } r[num]=n;//最后一个块的右端点一定是n for(l

2021-09-23 22:50:21 149

原创 字符串哈希

字符串哈希模板:ull p[300000],h[300000];char s[300000];//字符串从1开始存储ll n,m;void Hash(){ ll seed=131; p[0]=1; for(ll i=1;i<=n;i++) { p[i]=p[i-1]*seed; h[i]=h[i-1]*seed+s[i]; }}ll get(ll l1,ll r1,ll l2,ll r2){ ll p1=h

2021-09-22 17:09:44 108

原创 数论倒数(逆元)

除法求模:(a/b)%p=(ainv(b))%p=(a%pinv(b)%p)%p逆元求解:1、费马小定理(a与p互质才有a关于p的逆元)因为a^(p-1)≡1(mod p)两边同时除以aa^(p-2)≡inv(a)(mod p)inv(a)=a^(p-2)(mod p)可以用快速幂求解应用:组合数求解:ll fact[300000];ll infact[300000];ll mod=1e9+7;long long fastpower(long long base,long lon

2021-09-17 23:13:33 301

原创 博弈论模板

一、巴什博弈只有一堆n个物品,两个人轮流从中取物,规定每次最少取一个,最多取m个,最后取光者为胜若 n%(m+1)==0 后手必胜,否则先手必胜,若n>m,第一次取n%(m+1)个,若n<=m,则第一次可取n~m间任意个二、威佐夫博弈有两堆各若干的物品,两人轮流从其中一堆取至少一件物品,至多不限,或从两堆中同时取相同件物品,规定最后取完者胜利。while(cin>>n1>>n2){ if(n1>n2) swap(n1,n2);

2021-09-11 00:15:09 153

原创 最短路算法

一、单源最短路1、Dijkstra(迪杰斯特拉)算法假设图中1点为起点,求1点到其余个点的距离,将dis数组初始赋为极大值,且dis[1]=0。从1开始,我们先更新和1直接相连的节点,更新节点2、3、4。而后又可以从这三个节点选择一个继续搜下去。因为我们求的是最短路,所以我们选一个目前dis最小的节点进行扩展。假设当前节点为u,扩展到的节点为v,两点之间边权为w,只要在扩展图中发现存在dis[v]<dis[u]+w 就可以直接更新dis[ v ]的值了。也就是说每次都找到一个点来更新其他所有点

2021-09-01 22:31:50 160

原创 树的直径求解

定义:树的直径的定义:在一棵树中,每一条边都有权值,树中的两个点之间的距离,定义为连接两点的路径上边权之和,那么树上最远的两个点,他们之间的距离,就被称之为,树的直径。树的直径的别称,树的最长链。请注意:树的直径,还可以认为是一条路径,不一定是只是一个数值。树的直径一般有两种求解方法:1、两次搜索(BFS和DFS都可以)优点 : 可以通过一个新的数组记录路径信息(例如父节点与子节点之间的关系)缺点 : 无法处理 负边权(遇到 负边权 凉凉)思路:先任选一点,搜索找到距离该点最远的的点,该点

2021-08-30 22:11:17 408

原创 c++基础

2021-08-30 20:36:19 83

原创 埃氏筛和欧拉筛

埃氏筛:基本思想:从2开始,将每个质数的倍数全部标记为合数。代码:int vis[maxn];void prime(){ vis[0]=vis[1]=1; for(int i=2;i<=maxn;i++) { if(!vis[i]) { for(int j=i*i;j<=maxn;j++) {//小优化,因为i*1~i*(i-1)在1~i-1的计算中已经被标记为合数了,所以直接从i*

2021-08-29 16:48:42 179

原创 牛客noip赛前集训提高组二 B包含

题目链接这个题考虑逆向思维,要求你给出是不是存在包含x的数,可以直接先预处理出来给定序列的数包含的所有数。从大到小枚举,如果这个数是序列中的数,那么考虑它的所有是1的位置,如果某个位置是1,那么减去2相应的次幂之后的数必定是这个数所包含的数。因为每次得到的包含的数一定是越来越小,所以一定每个数都能遍历到。当遍历到这个数包含的数之后,在对这个数的每一位进行检查,那么然后再对它是1的位置做相应的减法之后得到的数实际上就是原始的数减去某两个或者多个位置上2的次幂之后的数。因此一定能得到所有一个数包含的数。#

2021-08-27 18:03:56 84

转载 最长上升子序列(LIS)、最长公共子序列(LCS)、最长回文子串 and 最长回文子序列(LPS)

最长上升子序列详细讲解

2021-08-25 16:52:06 99

原创 数论中的一些定理

定理:对于给定的正整数a,b,方程ax+by=c有解的充要条件为c是gcd(a,b)的整数倍定理的推广:方程ax+by+cz+…+nm=f(其中a,b,c…n,f为整数)有解的充要条件是f为gcd(a,b,c,…,n)的整数倍定理的应用:1、求解某个不定方程是否有解、2、给定一个序列{an},求一个整数序列{bn}使得a1b1+a2b2+…+an*bn值最小(要求最小值为正数),求这个最小值(根据裴署定理的推广,最小值即为gcd(a1,a2…an))裴署定理应用...

2021-08-25 16:49:18 803

原创 常用STL模板

vector

2021-08-17 22:31:35 102

原创 [NOIP2018 提高组] 旅行

题目在这里或者这里分析题目,m只有n-1和n两种情况。1、先看n-1的情况,在这种情况下,其实就是一棵树,要想求最小字典序的序列,我们只需要从1开始搜索(因为是无向边,无论哪一个节点都可以当作根节点),在该结点有多个分节点的情况下优先选择较小的节点即可,在搜索的过程中顺便把路径记录下来。在看当前节点的分节点的时候,这里可以考虑用一个vector数组去存,这样可以直接找到这个节点的所有相邻节点,还可以进行sort排序,遍历节点的时候可以从小到大。2、再看m等于n的情况,在这种情况下,可以看作将m条边中的

2021-08-17 22:26:22 166

原创 数论中的一些小知识点

1、分数取模一般不直接取模,而是利用快速幂取模:(a/b) %m= a*(b^(m-2))%m2、组合数计算可以考虑用杨辉三角来求,比较容易理解。3、找到某一个点使得其到其他点的距离尽可能小:给定n个坐标,让你找一个位置,使得这n个点到它的距离和尽可能短(dis=abs(x1-x2)+abs(y1-y2)),可以将n个点分别按照横坐标,纵坐标排序,横纵坐标的中位数一定是最小的,因为如果不是中位数,假设这个点在两个数之外,则他到两点的距离和一定是两个点分别到他的距离和相加,但是如果它在这两个点中间,则

2021-08-17 10:50:50 724

原创 异或性质和应用

异或的一些性质:异或性质:A xor B=A’ *B + B’ * A恒等律:X xor 0 =X归零律:X xor X =0交换律:A xor B=B xor A结合律:(A xor B) xor C=A xor(B xor C)与、或交换律:A · B = B · AA + B = B + A与、或结合律:(A · B) · C = A · (B · C)(A + B) + C = A + (B + C) 与、或分配律A · (B + C)= A · B + A · CA +

2021-08-17 10:42:46 504

原创 高精度取模模板

高精度取模模板:高精度取模可以这样用,但是有些题目不一定需要,比如有些题目只是判断一个数能不能被4整除,只需判断后两位之和即可,因为前面的数肯定是整百的,一定会被25的某个倍数整除,判断其他的数的时候也可以尝试这样做,找到这个数与另一个数的整十或者整百的可以参考这个题目//高精度取模:long long long_mod(string a, long long b){ int flag = 1, idx = 0; if(a[0] == '-') { flag

2021-08-17 10:37:22 466

原创 快速幂模板

快速幂的一个模板://取模运算如果取模的数是负数,一般考虑加上一个mod变成正数后再取模(如果明确要求就用这个负数取模的话可以不用,但是一般不会这么做)long long fastPower(long long base, long long power,long long mod){ long long result = 1%mod; while (power > 0) { if (power & 1) //此处等价于if(power%2==1

2021-08-17 10:30:57 126

原创 归并排序的实现

归并排序的实现:基本思路就是将区间逐渐变小,然后 将区间内的数,按照顺序依次放入TmpA数组中。归并排序相比于快排需要耗费更多的空间,但是它最慢的时间复杂度也是O(nlogn),但是在实际做题的过程中快排基本够用void Merge(ElementType A[],ElementType TmpA[],int L,int R,int RightEnd){ //将有序的A[L]~A[R-1]和A[R]~A[RightEnd]归并成一个有序序列 int LeftEnd,NumElement

2021-08-17 10:26:47 114

原创 二分常用模板

C++二分查找的手动实现:int lower_bound(int a[],int L,int R,int val) //二分寻找大于等于val第一个数的下标{ int mid; while(L<=R) { mid=(L+R)/2; if(a[mid]<val) { L=mid+1; } else { R=mid-1;

2021-08-17 10:20:14 102

原创 2021-08-16 两个序列变化问题

P1031均分纸牌参考解析均分纸牌加强版参考解析这种题目一般从一边开始看,比如他需要从紧挨着的右边的那个拿多少个,这样一直计算下去,如果是个环,则可以首先考虑从第一个给第n个多少个,然后在考虑第二个需要给第一个多少个,这样一直考虑下去...

2021-08-16 21:40:05 77

空空如也

空空如也

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

TA关注的人

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