
算法
文章平均质量分 78
BlackBullet_CN
这个作者很懒,什么都没留下…
展开
-
【大渣】树状数组
====================================================================================================================================== lowbit(int x) { return x&(-x); } =====================原创 2015-06-24 18:36:26 · 727 阅读 · 1 评论 -
【大渣】_gcd/_euclid
欧几里德算法:求最大公因数 int _euclid(int x,int y) { if(y==0)return x; else return _euclid(y,x%y); } ===========================================================================================================原创 2015-07-05 13:40:54 · 515 阅读 · 0 评论 -
【大渣】图的存储方法
图论 这里以NKOJ 1120为例 Description 有一无负权有向图。求指定两点间的最短路径。 Input 输入:第一行,两个数字n和m,表示n个顶点,m条边 接下来的m行,每行三个整数,分别表示边的起点、终点和边的长度 最后一行 两个整数 x y 表示求从点x到点y的最短路径 Output 输出:一行,一个整数,最短路径长度 Sample In原创 2015-07-29 11:55:24 · 431 阅读 · 0 评论 -
【大渣】关于sort函数排序
首先sort函数要使用算法包#include 使用形式为 sort(begin,end,way) begin 和 end 表示排序的范围 way表示排序的方式,当然也可以不用way就是默认从小到大排序 比如对与一个数组a[ ]从小到大 就可以写为 sort(a,a+k) #include #include using namespace std; int n,a[20]; in原创 2015-10-16 15:27:46 · 463 阅读 · 0 评论 -
【大渣】KMP算法
分为两个部分 首先需声明 char A[],B[]; int F[],n,m,i,j; scanf("%s%s",&A[1],&B[1]); A[0]=B[0]=' '; n=strlen(A)-1; m=strlen(B)-1; //需加入 第一部分为求Fail数组 F[1]=j=0; for(i=2;i<=m;i++) { while(j>0&&B[j+1]!=B[i])j原创 2015-07-24 15:07:23 · 413 阅读 · 0 评论 -
【大渣】线段树
====================================================================================================================================== 建树 void maketree(int x,int y) { tot++; int now=tot;原创 2015-06-24 18:34:32 · 711 阅读 · 1 评论 -
【NOIP复习】【数学】
====================================================================== 一些NOIP可能会用到的关于数学的东西= = 目录: 1.欧几里德与扩展 2.秦九昭算法 3.欧拉函数 4.卡特兰数 5.二分快速幂 6.杨辉三角/组合数计算 7.差分约束 PS:以上为个人整理/搬运,若有错误请指出 PS*2:容斥原理原创 2015-11-03 16:29:45 · 743 阅读 · 0 评论 -
【大渣】最长上升公共子序列
太坑了所以决定写下来= = 对于两个数列,我们要求他们的最长上升公共子序列该怎么求呢? 用Dp来做,我们很容易想到F[ i ][ j ]来表示A的前i项和B的前j项可以组成的最长上升公共子序列。 并且易得出转移方程: a[i]!=b[j]时:F[i][j]=F[i-1][j] a[i]==b[j]时:F[i][j]=max(F[i-1][k])+1 (1=b[k]//保证上升原创 2015-11-05 19:45:25 · 1226 阅读 · 0 评论 -
【大渣】二分快速幂
用于求 a^b%c,防止数据过大而溢出 int _Montgomery(int a,int b,int c) { int ans=1; a=a%c; while(b>0) { if(b&1)ans=(ans*a)%c; b=b>>1; a=(a*a)%c; } return ans; } 时间复杂度为O(log2b)原创 2015-07-05 13:51:19 · 977 阅读 · 0 评论