模板
yun_xing_
每一个伟大的目标,都有一个微不足道的开始——洛谷
展开
-
模板——最小生成树
题出自洛谷p3366最小生成树#include<cstdio>#include<iostream>#include<algorithm>using namespace std;inline int read(){ int p,data=0; char ch=0; while((ch!='-')&&ch<'0'||ch>'9') ch=getchar(); i原创 2017-07-29 19:25:28 · 238 阅读 · 0 评论 -
多重背包的二进制优化
引言——dp里面的背包问题。多重背包是指每个物品有c[i]个数量,如果普通的进行dp,f[i][v]=max{f[i-1][v-k*c[i]]+ k*w[i]|0<=k<=n[i]},那么会TLE(虽说我也不知道到底是多少…dalao们帮忙说下呗),如果将数量进行二进制拆分时,那么时间复杂度会显著减少( QAQ我也不知道是多少啊啊啊orz,跪求大佬)1.思想。 将一个数二进制拆分后变为2^0+2原创 2017-07-31 18:40:37 · 548 阅读 · 0 评论 -
模板——快速幂
1.萌新的话 快速幂主要是用来解决一些超时间复杂度的幂运算。其主要思想是根据一个结论:2^n=4^(n/2).这样原本暴力的O(n)算法优化为了O(logn)的算法了。(时间复杂度–!!!) 2.代码#include<algorithm>#include<cstdio>#include<cstring>#include<iostream>#include<queue>using nam原创 2017-07-31 21:57:36 · 209 阅读 · 0 评论 -
模板——二分查找
今天十分咸鱼的去洛谷刷了一道二分查找的题。本来自信AC结果崩了…发现还是有一些细节的,来记录一下。 保龄球——luogu 直接发代码好了,注意的地方用注释标记。#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int n,q;int b;struct pan{ int a;原创 2017-08-23 19:36:28 · 387 阅读 · 0 评论 -
二分答案
二分答案是NOIP的重点适用范围:二分答案的做法适用于题目答案满足某种意义上的单调性,直接求解难以接受,并且验证解是否可行较为容易的题目,常见的模型有“求xx的最值”“求最少/多需要多少xx才能满足xx”等。而二分的模型增加的时间复杂度只有log(区间长度),基本可以接受。时间复杂度:logn.如果暴力枚举,那么会做许多无用功。我们来设想一下。同样假设答案是上界,如果我们check了10000,发现原创 2017-10-07 17:01:41 · 583 阅读 · 0 评论 -
单调队列
链接求区间最小值本来是要用RMQ写的,但是发现貌似会超时?(雾),so用单调队列来直接过一遍#include<cstdio>#include<iostream>using namespace std;int p[2100000],a[2100000],n,m;int main(){ cin>>n>>m; int l=1,r=0; for(int i=1;i<=n原创 2017-10-27 15:21:10 · 187 阅读 · 0 评论 -
线段树优化——lazytag
线段树嘛,NOIP的重点,手打模板理解一发(部分借鉴notonlysuccess的线段树,侵删) 题目:线段树模板——洛谷 前言 朴素线段树都是有以下几个操作: 1.query(区间求和) 代码如下 int Query(int L,int R,int l,int r,int root) { if(L<=l&&R>=r) return tree[原创 2017-10-19 16:05:59 · 869 阅读 · 0 评论 -
Dijkstra——最小堆优化
Dijkstra+堆优化题目链接:文化之旅写完才发现这道题数据范围好小…完全可以用floyed写。不过正好顺便练练自己的代码能力orzdijkstra+堆优化 思路主要是通过优先队列来贪心的把最短路放进队列,从而减少时间复杂度,变成nlog(n)。代码如下。 #include<cstdio> #include<cstring> #include<iostream> #原创 2017-10-22 18:18:41 · 2355 阅读 · 0 评论 -
数论——扩展欧几里得
作为一个刚学数论的蒟蒻,看扩欧还是费了半天时间的…… 先发一下一道exgcd的题叭qwq 同余方程 一开始看是不会正解的,,,真的是一点也没法跟扩欧联系在一起qwq。然后又重新找各种博客、题解,终于能把这两个东西联系在一起,,, 先看一下扩欧的定义: 扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的原创 2017-10-24 20:40:57 · 241 阅读 · 0 评论