数据结构与算法
crazyboy12138
新博客地址: https://www.jianshu.com/u/6d5b80cdfe5d
展开
-
矩阵快速幂 非详解
#include <cstdio>#include <cstring>int n, k;const int mod = 9973;struct matrix{ int tr[10][10]; matrix operator * (const matrix &a) const{//重载运算符 matrix tmp; memset(tmp.tr原创 2017-02-05 16:49:58 · 220 阅读 · 0 评论 -
dijkstra算法求最短路径
#include <cstdio>#include <climits>int n, t;const int maxn = 1000 + 5;const int inf = 999999;//要保证大于所有的边,不要取INT—MAX,防止溢出typedef int vex_type;//顶点类型int cost[maxn][maxn];int lowcost[maxn];//lowcos原创 2017-04-01 07:35:07 · 389 阅读 · 0 评论 -
线段树模板
区间最值查询 poj 3264 Balanced Lineup#include <cstdio>#include <cmath>#include <iostream>#include <algorithm>using namespace std;#define Mid ((l+r)>>1)#define lson node<<1,l,Mid#define rson node<<1|原创 2017-01-15 10:50:58 · 336 阅读 · 0 评论 -
ST算法解RMQ问题
转载自: http://blog.csdn.net/liang5630/article/details/79177021. 概述RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。这两个问题是在实际应用中经常遇到的问题,下面介绍一下解决转载 2017-04-22 16:04:53 · 237 阅读 · 0 评论 -
字典树 trieTree
Tire树 即字典树,又称单词查找树,利用字符串的公共前缀,省去很多重复的比较,从而节省查询时间。 经常被搜索引擎系统用于文本词频统计。 上图便是一颗字典树, 可以看到,该树有以下特点: 树的根节点不含字符,其余节点含且只含一个字符 兄弟间所含字符各不相同 红色表示在该点形成一个单词(从根节点到该节点路径上所有字符连成的字符串) 例如,abc、abcd、abd等都是单词,上图共有7个原创 2017-02-03 16:59:22 · 341 阅读 · 0 评论 -
kmp算法详解 c语言
/* 介绍kmp算法前,不妨先了解这样一个数组:next数组 next[i]的值是 取字符串S的前i个字母组成的字符串s 的”最长公共前后缀”的长度 先解释前缀与后缀的含义:字符串”abcd”有三个前缀:a,ab,abc 有三个后缀:bcd,cd,d 例如,有字符原创 2016-11-05 09:20:37 · 1112 阅读 · 0 评论 -
筛素数
素数(prime):又称质数,是指在一个大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数。或者说素数是只有1和本身两个因数的数。 ps:比1大但不是素数的数叫合数。1和0既非素数也非合数。下面介绍一个筛选素数较高效率的算法:xxx算法 假如我们要筛出2-100之间的素数, 该算法假设存在一个筛子,该筛子用于存放2-100之间所有的数,由于2的倍数(2除外)都是合数,所以将这些数原创 2016-11-22 20:08:24 · 411 阅读 · 0 评论 -
快速幂取模
快速幂取模,即求a的n次方再取模,如果n很大,时间开销会很大其原理是以下两个明显的公式: 代码如下:#include <bits/stdc++.h>using namespace std;typedef long long LL;const int MOD=1000009;LL powerMod(LL a,LL n){ LL res=1; while(n){原创 2016-11-23 09:38:26 · 315 阅读 · 0 评论 -
n个数中,只有两个数只出现一次,其余数都出现两次,求这两个数
//题意:n个数中,只有两个数只出现了一次,其余数都出现两次,输出这两个数/*思路:全部异或得到一个非0数,也就是要求的两个数异或的值,非0二进制肯定至少有一位是1(我们取最低位),将所有数根据这一位是1或0分成两组,两组组内异或,最后得到两个数*/#include <iostream>#include <cstring>using namespace std;int judge(原创 2016-12-08 17:09:22 · 1327 阅读 · 0 评论 -
n皇后问题
Problem Description:在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。 你的任务是,对于给定的N,求出有多少种合法的放置方法。 Input:共有若干行,每行一个正整数N≤12,表示棋盘和皇后的数量;如果N=0,表示结束。Output:共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数原创 2017-01-20 11:37:07 · 284 阅读 · 0 评论 -
最大连续和的四种解法
最大连续和问题: 给出一个长度为n的序列A1,A2,A3,…An,求最大连续和。 即:找到1<=i<=j<=n,使Ai+A(i+1)+…+An尽量大解法1://枚举所有连续子序列,Tn=O(n^3)int maxn=A[1];for(int i=1;i<=n;i++) for(int j=i;j<=n;j++){ int sum = 0; for(in原创 2017-01-22 07:17:10 · 2060 阅读 · 0 评论 -
快排求第k大
/*设某次排序后,分界点x右边有p个元素,(此时x左边元素皆小于等于x,右边元素皆大于等于x)若p == k-1,则 x 为恰第 k 大;若p < k-1,则在区间[left, i) 之间求第 k-p-1 大若p > k-1,则在区间[i+1, right) 之间求第k大*/#include <cstdio>int qsort(int* A, int left, int right,原创 2017-02-05 21:49:37 · 705 阅读 · 0 评论 -
N个面包,有三中吃法,一次吃一个,一次吃两个,一次吃三个。如果把N的面包全部吃完,求所有的吃法序列打印出来 (JAVA)
import java.util.Scanner;public class Main { private int n; private int sum = 0; private int[] path = new int[30]; public void printPath(int m){ for(int i = 0; i < m; i+...原创 2018-05-13 09:38:52 · 982 阅读 · 2 评论