算法
_Yasin
苟有恒何必三更眠五更起 最无益莫过一日曝十日寒
展开
-
poj2431优先队列
题目大意,在一条路上有n个加油站,每个加油站有两个整数表示a(到终点的距离),b(这个加油站可以加的油量),最后一行,l(车一开距离终点的距离),p(车一开始油箱的油量)。让你求解到达终点加油次数最少为多少,不能到达输出-1本题才有优先队列的来解决。车的油箱是无穷大的,所以碰到加油站就可加油,所以当车没油的时候可以认为在该点之前所有的加油站都是可以加油的,既然要求次数最少,那就要先加油量最原创 2015-04-25 19:52:11 · 516 阅读 · 0 评论 -
Redis zset的数据结构:SkipList(跳表)的原理及实现
1.数据结构1.1 简介跳表(skiplist)是一个查询/插入/删除 复杂度o(lgn)的数据结构。在查询上跟平衡树的复杂度一致,因此是替代平衡树的方案。在redis的zset,leveldb都有应用。发现这个算法也解决了我一个问题。各种平衡树在工业界是广泛应用,帮助我们快速查找,插入数据,但其思想的复杂也让大家不是那么容易接触。当时想直接对有序链表进行二分搜索,那岂不是很容易做到相同复杂度...原创 2019-01-04 11:55:22 · 5352 阅读 · 0 评论 -
红黑树
红黑树是什么红黑树是一种树形数据结构,它的节点值的大小是按照左节点<父节点<右节点 这种顺序排列的。所有在搜索红黑树的值时,其复杂度是Olg(n)。如果有一组数据1,2,3,4,5,6,7按照这种顺序插入到树中,会导致所有的数据都在右节点上,这时候去这个树中搜索数据时,其复杂度依然是n,并没有任何优化,这是因为这种树结构左右失衡造成的。因此就有了平衡树这种数据结构,当发现左右节点深度不平衡时,通过一原创 2017-12-24 23:01:42 · 314 阅读 · 0 评论 -
dfs入门hdoj1016题解
该题目大意是输入一个n(n本题为dfs入门一道题#include#includeint ans[30],f[30],n;bool isprime(int num){ for(int i=2;i*i<=num;i++) if((num%i==0)) return 0; return 1;}void dfs(int k,int now)原创 2015-02-05 19:29:21 · 1060 阅读 · 0 评论 -
hdoj1242bfs入门
#include#include#include#include#includeint d[210][210];using namespace std;const int inf=0x7fffffff;char field[210][210];int n,m,sx,sy;int fx[4]={0,0,-1,1};int fy[4]={1,-1,0,0};struct pos原创 2015-02-07 18:39:09 · 734 阅读 · 0 评论 -
记忆化收索hdoj1978&蓝桥杯地宫取宝
hdoj 1978中文题目我就不赘述了,放个题目连接吧:http://acm.hdu.edu.cn/showproblem.php?pid=1978本题是典型的一个dfs题目,在加入一点dp的思想#include#include#include#define mod 10000using namespace std;int n,m;int map[110][110];in原创 2015-04-03 20:36:05 · 865 阅读 · 0 评论 -
康托展开的逆Hdoj1027
#include #include int ans[8];int jc[9];bool used[9];void jjc(){ jc[0]=jc[1]=1; for(int i=2;i<=8;i++) jc[i]=jc[i-1]*i;}//在8个数中找到第m个排列,在对排列结果+(n-8)void solve(int n,int m){原创 2015-04-21 17:48:07 · 604 阅读 · 0 评论 -
bc2015/2/7 第一题
第一次真正的做bc,第一题题意让你标胶a^b与c^d的大小关系,用log函数一弄就好比较了,但这里的‘=’情况是需要一个精度来判断的。#include#include#define eps 1e-14int main(){ double a,b,c,d,aa,cc; while(scanf("%lf%lf%lf%lf",&a,&b,&c,&d)!=EOF) {原创 2015-02-07 22:09:42 · 655 阅读 · 0 评论 -
利用旋转矩阵简便旋转二位矢量(SDacm4A题解)
题目原意是给你A,B两点坐标,让你求出逆时针的第三点C的坐标。我这里运用旋转矩阵的方法,大大缩减代码量及code难度。#include#includeint main(){ double x1,x2,y1,y2,ansx,ansy; int t; scanf("%d",&t); while(t--) { scanf("%lf%l原创 2015-03-25 21:43:54 · 1020 阅读 · 1 评论 -
Fibonacci数列一些性质
题目就不写了,写几个不知道的公式f(n+m)=f(n+1)f(m)+f(n)f(m-1)f(n)^2=(-1)^(n+1)+f(n-1)f(n+1)f(n)=f(n-1)+f(n-2) => f(n-1)=f(n)+f(n-2) => f(n)=f(n+1)+f(n-1)sum i->nf(i) = f(1)+ f(3)-f(1) + f(4)-f(2) + ....+原创 2015-04-03 21:40:55 · 737 阅读 · 0 评论 -
第四届acm F题(Alice and Bob)(巧用二进制)
题目连接:http://acm.upc.edu.cn/problem.php?cid=1109&pid=5大意是 给你一个这样(a0*x^(2^0)+1) * (a1 * x^(2^1)+1)*.......*(an-1 * x^(2^(n-1))+1)多项式,每个多项式的系数a由用户输入,项数n也是由用户输入,接下来输入一个q,下面有q行个p,表示x^p的,请你输出x^p的系数mod 201原创 2015-04-06 21:49:12 · 1039 阅读 · 0 评论 -
Hdoj1023栈的合法出栈方式
package com.yasin;import java.math.BigInteger;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n; BigInt原创 2015-04-18 16:58:41 · 900 阅读 · 0 评论 -
topk算法实现
0. 问题介绍top k就是求解一个数字队列前k大的问题,在工作后者面试中是一个非常常见的问题,这里说明两种解法。1.基于快排的解法1.1 算法思路这里假设你对快排已经熟悉。我们知道快排是随机找个标识,然后用此标识进行排序。我们进行降序排序的方式,第一次进行排序后,就能获得在序列中的大小位置。如果它正好是第k大,那么它左边的数组就是题目要求的top k(当然,这是很幸运的情况,我们要讨论...原创 2019-03-01 11:07:27 · 5150 阅读 · 0 评论