![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
信息奥赛一本通——高效进阶
信息奥赛一本通——高效进阶
SSL_LKJ
蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名 蒟蒻一名
展开
-
线性筛素数(欧拉筛)
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-12-24 21:53:29 · 437 阅读 · 0 评论 -
序列的第k个数(快速幂)
序列的第k个数输入样例21 2 3 51 2 4 5输出样例516解题思路AC代码#include<cstdio>using namespace std;int T;const long long Mod=200907;long long ksm(long long x,long long y){ long long ans=1ll; while(y) { if(y&1ll)ans=(ans*x)%Mod; y>>=1ll;原创 2021-12-18 10:41:36 · 585 阅读 · 0 评论 -
粉刷木板(dp)(单调队列)
粉刷木板输入样例8 43 2 23 2 33 3 51 1 7输出样例17解题思路这题乍一看是道dp设 fi,jf_{i,j}fi,j为前i个粉刷匠,刷了前j个木块(注:可以有木块不选)那就会有三种情况1.当前粉刷匠不刷任何一个木块2.当前粉刷匠不刷当前木块3.当前粉刷匠刷一段区间的木块前面两个的转移方程很简单,就不用多讲了主要看第三个,设粉刷区间[k+1,j][k+1,j][k+1,j]maxj−li⩽k<si &nbs原创 2021-12-18 08:27:35 · 541 阅读 · 0 评论 -
最短路径(状压dp)
最短路径输入样例50 2 4 5 12 0 6 5 34 6 0 8 35 5 8 0 51 3 3 5 0输出样例18解题思路状压dp转移方程设fi,jf_{i,j}fi,j为处理到第i个结点,所有结点的状态为jfi,j=min(fk,j xor (1<<i)+ai,k) f_{i,j}=min(f_{k,j~xor~(1<<i)}+a_{i,k}) fi,j=min(fk,j xor (1<<原创 2021-12-17 20:13:34 · 305 阅读 · 0 评论 -
种植方案(状压dp)
状压dp原创 2021-12-11 08:53:44 · 347 阅读 · 0 评论 -
P5020 [NOIP2018 提高组] 货币系统(完全背包 dp)
SSL集训原创 2021-08-12 22:30:24 · 156 阅读 · 0 评论 -
P1048 [NOIP2005 普及组] 采药(01背包 dp)
采药问题题目传送门解题思路就是 01背包 模板AC代码#include<iostream>#include<cstdio>using namespace std;int T,M,ans,t[105],m[105],f[1005];int main(){ scanf("%d%d",&T,&M); for(int i=1;i<=M;i++) scanf("%d%d",&t[i],&m[i]); for(int i=1;原创 2021-08-11 22:23:35 · 118 阅读 · 0 评论 -
树上距离(lca)(倍增)
集训原创 2021-08-08 22:11:28 · 119 阅读 · 0 评论 -
查找编号(倍增)
查找编号输入样例11 31 3 3 3 5 7 9 11 13 15 151 3 6AC代码#include<cstdio>using namespace std;int n,m,a[2000005];int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=m;i++) { int x,ans=0;原创 2021-08-08 16:39:50 · 134 阅读 · 0 评论 -
P4513 小白逛公园(线段树)
小白逛公园题目传送门输入样例5 31 2 -3 4 51 2 32 2 -11 2 3输出样例2-1解题思路用线段树的每个节点维护:sum(区间和),maxx(区间最大子段和),lmax(从区间左端点开始的最大子段和),rmax(从区间右端点开始的最大子段和)AC#include<iostream> #include<cstdio>using namespace std;int n,m,a[500005];struct node { i原创 2021-07-12 11:49:06 · 149 阅读 · 0 评论 -
区间查改(线段树)
区间查改输入样例5 102 6 6 1 12 1 41 2 5 102 1 32 2 31 2 2 81 2 3 71 4 4 102 1 21 4 5 62 3 4输出样例1534323350解题思路线段树区间修改+区间查询的模板题AC代码#include<cstdio>using namespace std;int n,q,a[10000005],add[10000005];long long sum[10000005];void原创 2021-07-09 11:01:42 · 75 阅读 · 0 评论 -
求区间和(线段树)
求区间和输入样例10 200 1 101 1 40 6 61 4 101 8 91 4 90 10 21 1 80 2 101 3 90 7 80 3 100 1 11 3 81 6 90 5 51 1 80 4 21 2 80 1 1输出样例1060616624145041解题思路本题为线段树模板题可参考线段树练习题一(线段树)AC代码#include<cstdio>using namespace std;原创 2021-07-08 11:00:08 · 86 阅读 · 0 评论 -
与众不同(RMQ问题)(ST表)
与众不同解题思路RMQ+ST表AC代码#include<iostream>#include<cstdio>#include<cmath>using namespace std;int n,m,a[200005],pre[200005],last[2000005],f[200005][60];void RMQ()//求区间最大值{ for(int j=1;j<=log2(n);j++) for(int i=1;i+(1<<j)-原创 2021-07-07 21:15:03 · 378 阅读 · 0 评论 -
静态区间(RMQ问题)(st表)
静态区间解题思路这题和数列区间(RMQ问题)(st表)很像更改max为gcd即可AC代码#include<cstdio>#include<iostream>using namespace std;int n,m,Log[100005],f[100005][30];int gcd(int x,int y)//求最大公因数{ while(y) { int z=y; y=x%y; x=z; } return x;}void Getlog()//原创 2021-06-13 10:49:52 · 115 阅读 · 0 评论 -
数列区间(RMQ问题)(st表)
数列区间解题思路这题就是典型的RMQ模板题AC代码#include<cstdio>#include<iostream>using namespace std;int n,m,Log[100005],f[100005][30];void Getlog()//log预处理{ Log[0]=-1; for(int i=1;i<=n;i++) Log[i]=Log[i>>1]+1;}void RMQ()//st表预处理{ for(int原创 2021-06-13 10:44:09 · 148 阅读 · 0 评论 -
区间修改区间查询(树状数组)
区间修改区间查询解题思路二维差分+区间查询AC代码#include<cstdio>using namespace std;int n,m;long long c[4][5005][5005];int lowbit(int x){ return x&(-x);}void update(int x,int y,long long k)//存储{ for(int i=x;i<=n;i+=lowbit(i)) for(int j=y;j<=m;j+=原创 2021-06-13 09:27:52 · 81 阅读 · 0 评论 -
单点修改区间查询(树状数组)
单点修改区间查询解题思路就是典型的二维树状数组用二维前缀和求答案AC代码#include<cstdio>using namespace std;int n,m;long long c[5005][5005];int lowbit(int x){ return x&(-x);}void update(int x,int y,long long k)//存储{ for(int i=x;i<=n;i+=lowbit(i)) for(int j=y;j&原创 2021-06-13 08:30:57 · 133 阅读 · 0 评论 -
P3372 【模板】线段树 1(区间修改区间查询)(树状数组)
P3372 【模板】线段树 1(区间修改区间查询)题目传送门解题思路这题除了用线段树做还可以用树状数组做主要就是利用二维树状数组进行维护AC代码#include<cstdio>using namespace std;int n,T;long long c[3][1000005];int lowbit(int x){ return x&(-x);}void update(int x,long long y)//存储{ int xx=x; for(;x原创 2021-06-12 16:46:23 · 112 阅读 · 0 评论 -
严格上升子序列数(树状数组)(离散化优化)
严格上升子序列数解题思路这题跟P1908 逆序对(树状数组)(离散化优化)有异曲同工之妙可推出式子(设f(i,j)表示以第i个数结尾、长度为j的严格上升子序列数)当然当j=1时结果为1再用离散化优化AC代码#include<algorithm>#include<cstring>#include<cstdio>long long n,m,a[1005],b[1005],c[1005][1005],f[1005][1005];using name原创 2021-06-12 15:17:27 · 913 阅读 · 0 评论 -
P1908 逆序对(树状数组)(离散化优化)
逆序对题目传送门解题思路我们考虑看对于每个位置有多少个在它前面的数比它大(每存在这么一个数,它就可以和你这个数组成一个逆序对)用树状数组做(离散化优化)只需要存那个数在数组中是第几大就好了AC代码#include<algorithm>#include<cstdio>using namespace std;long long n,ans,a[500005],b[500005],c[500005];long long lowbit(long long x){原创 2021-06-08 16:12:31 · 141 阅读 · 0 评论 -
P3374 【模板】树状数组 1(单点修改区间查询)(树状数组)
单点修改区间查询题目传送门解题思路树状数组的模板题AC代码#include<cstdio>using namespace std;long long n,m,c[1000005];long long lowbit(long long x)//lowbit{ return x&-x;}void update(long long x,long long y)//修改{ for(long long i=x;i<=n;i+=lowbit(i))c[i]+=y原创 2021-06-03 16:46:43 · 138 阅读 · 0 评论 -
工作安排(二叉堆)
工作安排解题思路先升序排序再用小根堆来充当工作清单AC代码#include<algorithm>#include<iostream>#include<cstdio>using namespace std;int n,len,tot,tree[100005];long long ans;struct node{ int t,w;}a[100005];bool cmp(node x,node y){ return x.t<y.t;}原创 2021-06-03 15:51:45 · 70 阅读 · 0 评论 -
龙珠游戏(二叉堆)
龙珠游戏解题思路链表思想+二叉堆AC代码#include<iostream>#include<cstdio>using namespace std;int n,len,a[100005],b[100005],next[100005];struct node{ int x,i;}tree[100005];void put(node k)//存储{ tree[++len]=k; int son=len; while(son>1) { int原创 2021-06-03 15:49:33 · 122 阅读 · 1 评论 -
序列合并(二叉堆)
序列合并解题思路用归并排序比较n个队头然后可用小根堆优化AC代码#include<iostream>#include<cstdio>using namespace std;int n,len,ans,a[100005],b[100005];struct node{ int x,y,sum;}tree[10000005];void put(int x,int y)//存储{ tree[++len]=(node){x,y,a[x]+b[y]}; int原创 2021-06-03 15:46:44 · 235 阅读 · 2 评论 -
合并果子(二叉堆)
合并果子解题思路这题用的是二叉堆中的小根堆搬上百度百科的二叉堆AC代码#include<iostream>#include<cstdio>using namespace std;int n,len,ans,tree[10005];void put(int x)//进堆{ tree[++len]=x; int son=len; while(son>1) { int fa=son/2; if(tree[son]>=tree[fa])ret原创 2021-06-02 17:30:47 · 136 阅读 · 0 评论 -
恒星的亮度(强连通分量)(Tarjan)
恒星的亮度解题思路先缩点变成一个最短路模型用dij通过此题AC代码#include<iostream>#include<cstdio>#include<queue>using namespace std;long long n,m,ans,tot,tot1,top,T,TT;long long f[1000005],ru[1000005],dfn[1000005],low[1000005],col[1000005],sum[1000005],st原创 2021-06-02 17:02:00 · 111 阅读 · 0 评论 -
受欢迎的牛(强连通分量)
受欢迎的牛解题思路先缩点成一个有向无环图如果只有一个出度为0的点那么这个新图中出度为0的点所代表的牛都是明星输出该强连通分量中的点数否则没有牛成为明星输出0AC代码#include<iostream>#include<cstdio>using namespace std;int n,m,ok,top,tot,ans,T,TT,du[50005],low[50005],col[50005],dfn[50005],sum[50005],stak[50005],h原创 2021-06-02 16:52:26 · 97 阅读 · 0 评论 -
有向图缩点(强连通分量)
有向图缩点解题思路这题先求强连通分量缩点再进行dpAC代码#include<iostream>#include<cstdio>#include<queue>using namespace std;int n,m,T,TT,tot,tot1,top,ans; int f[10005],ru[10005],dfn[10005],low[10005],col[10005],sum[10005],num[10005],stak[10005],head[100原创 2021-06-02 16:45:45 · 130 阅读 · 0 评论 -
P4009 汽车加油行驶问题(spfa)
汽车加油题目传送门解题思路建边再spfaAC代码#include<cstring>#include<cstdio>#include<queue>using namespace std;int N,K,A,B,C,tot,c[1000005],head[1000005],a[105][105];int dx[4]={-1,1,0,0};int dy[4]={0,0,-1,1};int dd[4]={1,0,1,0};long long ans原创 2021-05-20 17:26:51 · 87 阅读 · 0 评论 -
最优贸易(spfa)
最优贸易解题思路用两个spfa第二个要倒置AC代码#include<iostream>using namespace std;#define N 1000005#define M 5000005int n,m,x,y,z,tot1,tot2,head,tail,b[M],c[N],w[N],head1[M],head2[M],maxn[N],minn[N];struct stu{ int to,next,w;}a1[M],a2[M];void add1(int原创 2021-05-20 17:20:43 · 133 阅读 · 0 评论 -
判断负环(spfa)
判断负环解题思路spfa判断负环AC代码#include<cstring>#include<cstdio>#include<queue>using namespace std;int T,n,m,tot,d[2005],c[2005],v[2005],f[10005],hd[2005];queue <int> q;struct node{ int to,next,w;}a[6005];void add(int x,int y,i原创 2021-05-20 17:01:58 · 128 阅读 · 2 评论 -
P4779【模板】单源最短路径(标准版)(dij)
单源最短路径题目传送门解题思路dij模板AC代码#include<cstring>#include<cstdio>#include<queue>using namespace std;int n,m,s,tot,c[100005],head[100005];long long d[100005];priority_queue<pair<int,int> > q;//队列struct node{ int to,next原创 2021-05-20 16:51:45 · 95 阅读 · 0 评论 -
构造完全图(最小生成树)
构造完全图解题思路dijkstra算法AC代码#include<algorithm>#include<cstdio>using namespace std;int n,tot,f[100005],len[100005];long long ans;struct node{ int x,y,z;}a[100005];bool cmp(node x,node y){ return x.z<y.z;}int find(int x){ if(f[原创 2021-05-20 16:32:55 · 292 阅读 · 0 评论 -
公路建设(最小生成树)
公路建设解题思路kuraskal算法AC代码#include<algorithm>#include<cstdio>using namespace std;int n,m,o,f[505];struct node{ int x,y,z;}a[4005];bool cmp(node x,node y){ return x.z<y.z;}int find(int x){ if(f[x]==x)return x; else return f[x原创 2021-05-06 17:39:06 · 150 阅读 · 1 评论 -
新的开始(最小生成树)
新的开始解题思路prim模板题AC代码#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int sum=2147483647;int n,ans,b[305],c[305],f[305][305];int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d"原创 2021-05-06 17:35:18 · 87 阅读 · 0 评论 -
P2330 [SCOI2005]繁忙的都市(最小生成树)
繁忙的都市题目传送门解题思路这题直接用最小生成树来做我用的是primAC代码#include<cstdio>#include<cstring>#include<iostream>using namespace std;int n,m,k,s,a[305][305],b[305],f[305];int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int u原创 2021-05-06 17:30:14 · 140 阅读 · 1 评论 -
逐个击破(并查集)
逐个击破解题思路把公路看作边把城市看作点被占领的城市称为特殊点这题就成了求使特殊点互不连通的最优删边方案AC代码#include<algorithm>#include<cstdio>using namespace std;long long n,m,k,x,ans,b[1000005],f[1000005];struct node{ long long x,y,z;}a[1000005];bool cmp(node x,node y){ retu原创 2021-05-06 16:56:52 · 167 阅读 · 1 评论 -
超市购物(并查集)
超市购物解题思路将每个时间点看作一个集合把收益按从大到小排序AC代码#include<algorithm>#include<iostream>#include<cstdio>using namespace std;int n,ans,f[10005];struct node{ int p,d;}a[10005];bool cmp(node x,node y){ return x.p>y.p;}int find(int x)//找原创 2021-05-06 16:50:29 · 140 阅读 · 0 评论 -
P2024 [NOI2001] 食物链(并查集)
食物链解题思路这题可以用扩展域并查集分别是:同类捕食天敌AC代码#include<cstdio>using namespace std;int n,k,ans,f[50005*3];int find(int x){ if(f[x]==x)return x; return f[x]=find(f[x]);}int main(){ scanf("%d%d",&n,&k); for(int i=1;i<=3*n;i++)f[i]=i; f原创 2021-05-06 16:41:24 · 71 阅读 · 0 评论 -
P1196 [NOI2002] 银河英雄传说(并查集)
银河英雄传说题目传送门解题思路边带权的并查集AC代码#include<iostream>#include<cstdio>#include<cmath>using namespace std;int t,f[30005],num[30005],sum[30005];int find(int x)//找爸爸{ if(x==f[x])return x; int xx=find(f[x]); sum[x]+=sum[f[x]]; return f原创 2021-05-06 16:24:33 · 160 阅读 · 0 评论