自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (2)
  • 问答 (6)
  • 收藏
  • 关注

原创 KMP算法到底在干什么

在写这篇文章之前参考了两篇文章,觉得写得很好,尤其是阮一峰写的KMP算法。 KMP算法的关键是它的next数组,利用next数组能够高效地确定在当前失配的情况下,应当将模式串移动多少位才能够避免不必要的匹配。不必要的匹配 如图,如果当前目标串与模式串在D处发生失配,传统方法是从模式串的开头位置重新移动,直到开头位置能够找到匹配的字符然后重新开始下一个匹配流程。但我们注意到在D发生失配之前的AB是

2017-09-16 11:17:04 9418 3

原创 javaScript的封装特点和继承机制

javaScript中的继承机制和以往熟悉的OOP概念有点区别,这也导致在继承和封装过程中都有一些需要特别注意的地方

2017-07-29 22:27:23 362

原创 Codeforces 830A, Binary Search

题意:简单并抽象的说,现在有一根直线,上面某个坐标 pp 标记了办公室所在的位置,同时有 nn 个坐标标记了 nn 个人的位置,以及 kk 个标记了钥匙的位置。现在这 nn 个人都想进入这个办公室,但是进入的前提是需要有钥匙,但每个人只能有一把钥匙,所以如果某个人的位置没有钥匙的话,他需要走到某个有钥匙的位置拿到以后进入办公室。所有的人可以同时行动,数量上满足如下关系:1≤n≤1031 \le n

2017-07-21 00:43:52 378

原创 Codeforces 808D 数组分割

题目大意给定一个只有正整数组成的数组,判定是否能够只通过一次数字替换来保证能够找到一个合适的分隔位置来使得被分割出来的两半数组,它们分别的和相等。 题目链接见此:Codeforces 808D这个问题可以抽象成一个确定的前缀数组加上或者去掉一个数字,定义数组:pre[i]pre[i] 定义一个记录 [0,i)[0, i) 的数组和,σ\sigma 表示在可以二分数组和的情况下的二分和,kk 表示在

2017-06-20 22:39:43 322

原创 算法导论习题(10)

10.2-8 说明如何在每个元素仅使用一个指针x.np的(而不是通常的两个指针next和pre)情况下实现双向链表,假设所有的指针的值都可以视为k位的整型数,且定义x.np = x.next ^ x.pre,即 x.next 和 x.pre 的异或,(NULL的值为0)注意要说明获取表头所需的信息,并说明如何在该表上实现SEARCH、INSERT、DELETE和REVERSE,REVERSE要求时

2016-08-21 21:33:23 436

原创 算法导论习题(9)

练习(持续更新...)9.3-3 假设所有元素都是互异的,说明在最坏情况下,如何才能使快速排序的运行时间为O(nlgn)?快速排序的最坏情况就是选取的主元要不是当前范围的最大值,要不就是最小值,只有避免这种情况,才能够使得快排达到期望值。之前有写过一个在O(n)复杂度等级的随机选择,目的是可以在O(n)内计算出指定第几个最小或者最大的值。这里可以借鉴:1)先计算出中位数,将中位数和原本

2016-08-18 19:51:13 1004

原创 选择算法-在线性时间内选择任意第几个小(大)的数

给定一组随机数,然后在O(n)的时间内计算出它的第i小的数,想法是结合快排,但是每次只是计算单边,代码如下:#include #include #include #include #include using namespace std;int A[30] = {0};// initialize the array:Avoid init_arr() { puts("---

2016-08-18 14:51:20 461

原创 关于在小米手机上配置Sqlite3的问题

在Android开发过程中,如果你正好使用小米手机进行真机测试,而且正好又要用到sqlite3,而且正好想要查看手机上数据库的数据,正好你想找一些安装教程,那么就别想了。有个事实说明一下,网上找到的sqlite3版本都是2012版的(在我写这篇博客之前都是),那么如果你的电脑上的sqlite3如果是其它版本,那么就会出现header和source匹配的错误,这个时候,你就当放弃这种尝试,可以在手机

2016-06-04 11:11:27 2088

原创 Android学习笔记:高效载入大量Bitmap

许多情况下,我们的应用中需要的图片大小总是小于图片的原始大小如果我们不在载入之前做一些处理的话,那么我们会遇到比如图片资源占用大量内存的状况,所以通常在载入图片之前,我们做一些裁剪工作:一、读取Bitmap的维度和类型BitmapFactory类提供了一些数据解压方法,比如:decodeByteArray()、decodeFile()、decodeResource()等等。为了以各种来源的

2016-05-18 23:52:22 2188

原创 Django学习笔记(一)

Django是一个网站后端框架,使用起来确实方便,之前也看着别人的博客试着用过Flask,但还是觉得Django好,其中一点就是Django的Model都给你做好了,没有必要再去自己建Model,节省了数据库的构造时间,这里是Django官方文档,如果有小伙伴在看这篇笔记,那么需要忍受一下几点:1)作者是初学者,所以有许多不全或者不正确的理解,也许之后会改正;2)这篇笔记只是将我对工程结构

2016-04-27 17:13:23 5431

原创 Python3笔记-电子邮件的收发

一、电子邮件的发件过程:发件人email->MUA(mail user agent:邮件用户代理)->MTA(mail transfer agent:邮件传输代理)->MDA(mail delivery agent:邮件投递代理,也就是服务器)二、

2016-04-23 23:50:32 11276

原创 字符串匹配的KMP算法(不建议大家看,这里是我的暂时笔记)

做个记录:#include #include #include #include using namespace std;const int maxn = 1000;int Next[maxn];string pattern, target;void produceNext() { int i = 0, j = -1, len = pattern.length();

2016-04-17 00:05:55 355

原创 简单数学题或者计算几何:Codeforces 659D-Bicycle Race

Codeforces 659D题目大意如下:自行车环湖赛,车手围绕湖骑行一周,给出车手骑行的路线的每个转弯处的坐标,同时需要注意的是车手在转弯方向朝向湖的时候有骑进湖里的危险。现在要你根据给出的这些点的坐标,判断车手将会有多少个转弯危险处(每相邻三个点之间的两条路方向都是不同的,而且车手开始的地方是在最西南角)。给人的第一印象是几何,所以理所当然的想到计算几何,但是之后还有一种非常简单的判

2016-04-12 10:26:51 542

原创 最小生成树-Kruscal-POJ 1258 Agri-Net

POJ 1258题目简单,背景忽略,就是直接裸露的使用kruscal方法求最短路。虽然简单,但是深深的体会了这个题目的恶意,简直了。。。就是如下的代码:for (int i = 0; i < k; i++) { int x = edge[i].s, y = edge[i].e, w = edge[i].cost; int tx = findRoot(x), ty = findR

2016-03-25 15:35:30 345

原创 最短路POJ 3268

POJ 3268题目大意如下:有N头牛分布在N个农场,现在有一头X农场的牛要举办party,那么其他农场的牛都会去参加。其中N最大为1000,农场和农场之间存在一些单向路径,路径的条数M最大为100000。如果每头牛都走最短路径(算上来回,也就是从它的农场到X农场,再从X农场回到自己农场),那么这些最短路径中最长的路径是多少?这里涉及到的是任意两点间的最短路径,1)一开始想到的是war

2016-03-25 09:14:37 493

原创 Codeforces 651A Joysticks

Codeforces 651A Joysticks题目大意如下:有两个游戏棒,开始各含有charge[0]和charge[1]的电量,都大于0。现在要使用这两个游戏棒玩游戏,但是如果其中只要有一个游戏棒没有电(也就是0)那么游戏就没有办法进行下去。现在知道只有一个充电口,而且充电只能在每分钟的开始阶段,每分钟可以充入1%的电量,然而玩游戏每分钟会消耗2%的电量(只能一个在充电,一个在玩)。现在

2016-03-21 12:35:34 364

原创 01背包问题-POJ 2184 Cow Exhibition

POJ 2184题目大意如下:背景就不介绍了,就是给出N组数,每组数有两个标准,都是整数。现在要求给出一个方案,求出从这N组数中摘取一部分,使得这一部分的两个标准的和最大,而且还要满足两个标准分别的和不能小于零。隐约觉得这是一个背包问题,开始比较难看出问题,最开始我的解决方案是:区间最优的叠加。也就是说定义dp[i][j]表示区间[i, j)内的最优方案,而且保证dp[i][j]的s和f都

2016-03-18 17:32:26 335

原创 多重背包-POJ 2392 Space Elevator

POJ 2392题目大意如下:FJ的牛想上天,但是要借助梯子,现在有K种梯子,由于会收到宇宙射线的影响,所以每种梯子限定了能够到达的最大高度。给出K种梯子的单位长度、数量、以及允许到达的最大高度。现在要求给出一个最优方案,使得使用这K种梯子到达最大高度。还是DP,定义dp[i][j]:表示使用前i+1种梯子是否能够到达高度j。之前自己都没有意识到这是一个多重背包问题,所以写了个比较烂的

2016-03-17 22:09:42 337

原创 动态规划-POJ 3666 Making the Grade

POJ 3666题目大意如下:给出N个土堆的高度,现在知道对每个土堆的高度作修改,不管是增高土堆的高度还是减少土堆的高度,其花费都是一样的,改变了H高度,就会产生H的花费。现在要求是的土堆的高度呈现一个单调的变化趋势,设计方案,求出最小的花费。第一考虑是使用DP,然而DP数组的设置又是一个问题,还是从原来的问题着手:对于每个单独的土堆i来讲,它的最大允许高度不是等于i-1就是等于i+1

2016-03-17 18:15:28 555

原创 计算几何+并查集处理:POJ 1127 Jack Straws

POJ 1127题目大意如下:有n根小棍分布在一个二维平面上,每根小棍标记了它两端的坐标,小棍的序号是从1~n,现在的问题是:给出任意两根小棍的序号,问它们是否是相连的。这里相连的定义是:可以直接相连(相交),或者通过若干根其他小棍间接相连。不能直接去研究两根小棍的相交情况(比如直接去求它们的交点坐标),可以考虑向量。在向量里面,假设向量P1 = S1 - T1,P2 = S2 -

2016-03-17 09:59:15 474

原创 矩阵快速幂

矩阵快速幂在动态规划,快速计算矩阵有着非常重要的作用,可以很大程度上减少计算消耗的时间。它的实质其实就是:矩阵计算+快速幂。1.矩阵乘法对于矩阵A*B,要遵循的是A的列数要等于B的行数,其他要求没有:#include #include #include #include #include using namespace std;const int M = 10000;t

2016-03-15 16:23:35 286

原创 设置优先级 POJ 1065 Wooden Sticks

POJ 1065题目大意如下:给出N段木头的数据,每段木头的数据表示形式为:(L,W)。表示的是木头的长度和质量,但是有一个要求(题目我也没有看太懂==,只解释一下大致意思),如果前一段木头数据的字典序小于之前的木头数据,就会花费一些时间。现在给出一些木头的数据,要你给出一个方案,使得花费的时间最少。这个题目其实很简单,书上布置的这个作业要求用DP方法,但是今天做这个题的时候,并没有想出D

2016-03-12 19:30:59 304

原创 最长上升子序列(LIS)POJ 1631 Bridging Signals

POJ 1631题目大意如下:给定N个测试,每个测试的数据:第一行输入P,表示有P个连接,接下来的P个数据是按照下标从1到P排列的,每个下标i对应一个连接数a[i],表示i和a[i]是连接的,生动点就如下图所示,问题要求给出一个数字,表示的是在这P个连接数里,没有互相交叉的最大组合数。从上图看的话,其实只是有助于理解题目意思,但是要解决问题的话,这个图还是会带来干扰。肯定不

2016-03-12 19:10:07 479

原创 线段树学习笔记

本文笔记在参考一步一步理解线段树-tenos的基础上形成:线段树,也是二叉搜索树的一种,是基于数组,但是优于数组的一种数据结构。同时结合预处理(时间复杂度一般在O(n))使得从原来数组的O(n)的查询和更新复杂度降到了O(logn),在处理很大数据量的数据更新和查询最值方面变得简单,值得一提的是,它的构建也很简单。这里从最小值的问题讨论(一般,线段树用在查询最值比较方便)1.构建线段树:

2016-03-11 15:11:39 340

原创 POJ 2104 K-th Number

POJ 2104题目大意如下:给定N(N 如果单纯的使用排序,对于5000次询问,这样花费的时间比较多。这里采用平方分割的方法,那么可以在O(n^0.5)的时间内完成。大方向是使用另外一个N容量的数组存储对原来数组的升序情况,然后采用二分法,每次选取一个数,根据这个数在(i,j)区间的位置情况,进而选出真正的第k个数。1.假设X是第k个数,那么一定有:1)在询问区间内,不超过X

2016-03-10 22:57:04 338

原创 POJ 3046 Ant Counting

POJ 3046题目大意如下:指定蚂蚁家族有T个,每个家族的蚂蚁数量最多为100只,最少当然为1了,总共有A只蚂蚁,每只蚂蚁唯一的区别就是它所对应的家族编号,相同编号的蚂蚁看成没有差别。现在将这些蚂蚁分成不同的集合,指定每次分割是的集合大小(每次分割出来的集合大小都是统一的)。现在指定集合大小的范围,求出对于不同集合大小的分割方法的总和。这是一个递推问题当然也是DP,所以重要的不是自己去模

2016-03-07 00:13:55 452

原创 POJ 3181 Dollar Dayz

POJ 3181题目大意如下:给出一个正整数N,并指定只能在1到K的范围内,使用这K中整数将N分解,问分解的方式有多少种。如果按一般的方法来想,我们可以这样定义表达式:dp[i][j]表示使用前i种数来组成j的方法数,那么就有dp[i + 1][j] = Sigma(0, min{j, n(i + 1)})dp[i][j - k]。但是这样算的话,就会是这样:for (int i

2016-03-06 23:51:09 278

原创 POJ 3616 Milking Time

POJ 3616题目大意如下:又是FJ和他的牛,FJ给牛指定了产奶时间段,每个时间段内,牛在不停的产奶,当这个时间段完结后,牛需要R时间休息。给出M个时间段,和指定的间隔休息时间,以及每个产奶时间段产奶数量,求产奶的最大值。终于自己AC了一个dp,但是还是wrong了两次(不细心,把M当成了R)。简单dp的基本就是写出状态转移方程,dp数组对应0到第j段产奶时间短的最末时间,表示整个区间,

2016-03-03 16:07:57 310

原创 POJ 2385 Apple Catching

POJ 2385题目大意如下:(这个题,去年学院选拔考试考过,然而并不会做,今天又遇见,煎熬两小时。。。)FJ的牛喜欢吃苹果,有两棵苹果树,每隔一分钟,有且仅有一棵苹果树会掉下一个苹果,不计牛的运动时间,算出牛最多能吃多少个苹果(限定了牛在两棵树之间的最大移动次数)。典型的DP问题,之前想过DP树,但是之后不知道怎么化简,转而考虑状态方程。对于第i分钟牛的第j次移动有以下规律:1)

2016-03-03 13:54:41 387

原创 POJ 229 Sumsets

POJ 2229题目大意如下:要求将一个正整数分解成2的指数幂的形式,问这样的分解有多少种方式。这本来是一个很简单的Dynamic Programming,但是有时候算法题写多了似乎会忘记最初的最基本的想法(其实还是自己不太熟练)。记住DP的一个非常基础的要求,而且这个要求还是和递归相似的:要求原问题,其实就是对子问题求解,但是这里的子问题不是每次都要求你的知道,也许只要知道最最最初的解就

2016-03-02 22:33:26 434

原创 POJ 3176 Cow Bowling

POJ 3176题目大意如下:这里做个抽象,问题背景就省了:有一个三角数堆,从顶点开始加和,找出一条从顶点到底边的最大和路径,求出这个和。十分简单的Dynamic Programming,可以抽象成:dp[i][j] = value[i][j] + max(dp[i + 1][j] + dp[i + 1][j + 1]);从上面式子可以看出,其实对于dp数组而言,第一维是没有必要的

2016-03-02 22:24:53 272

原创 POJ 3262 Protecting the Flowers

POJ 3262题目大意如下:还是关于Fermer John 和他的奶牛的故事,FJ有一个花园,里面种了很多花。每天FJ会带牛在外面吃草,牛群回来之后,在FJ不注意的时候会吃掉花园里的花,所以FJ需要把牛群运到它们的牛棚里去。每次只能运送一头牛,给出了运送每头牛所花的时间和每头牛能够每单位时间吃掉的花的数量,现在要求给出一个最优方案,使得FJ损失的花数量最少。一开始想的太简单,看到题目给出

2016-03-01 11:47:06 414

原创 POJ 1862 Stripies

POJ 1862题目大意如下:舍去题目背景,意思就是:给出一组数,通过不断进行两数之间的运算2*sqrt(m1*m2)来得到最终的结果,现在要求得到的结果最小,请选择一个最优的方案。这是一个非常简单的贪心,为了保证得到的数最小,肯定每次都要把最大的两个数进行运算,使得这组数的最大值不断下降,这样得到的最终结果就是最小值。不知道是什么原因,这题写的算法没有任何问题,但是却wrong了一次

2016-03-01 10:46:38 358

原创 POJ 3040 Allowance

POJ 3040题目大意如下:(最近做的题总是FJ和他的奶牛。。。)FJ想给他的奶牛奖赏,准备的奖金分成N组,每周发给奶牛的奖金不能少于C,每一组都是同一种面值的硬币,同时还告诉了每一组硬币的数量。现在要去寻找一种最佳方案,使得能够最大周数分发奖金。还有一点(最近看题总是丢三落四):从最小面值到最大面值,前一面值能够整除后一大的面值。关于题目给出的这个整除关系,开始没有看到,折磨了半天

2016-02-29 23:55:41 694

原创 POJ 1017 Packets

POJ 1017题目大意如下:有1*1、2*2、3*3、4*4、5*5、6*6这六种型号的包装盒,也指定了相对于这六种型号的产品的分别的数量。由于物流运送费用是和运送商品的数量成正比的(商品运送的时候是包装在包装盒里的),为了节省物流开支,需要确定一种最佳的包装方案,即:使用最少数量的包装盒。简单的贪心,具体分析如下:1)都使用6*6的包装盒;2)如果一个包装盒里包装的是6*6

2016-02-29 11:26:42 303

原创 POJ 2393 Yogurt Factory

POJ 2393题目大意如下:这是一个费用问题,实际背景是生产酸奶,工程分为N周,指定每周存储酸奶的费用为S,给出每周的单位酸奶制造成本以及客户需求量,要求给出最佳的生产方案,使得总的花费最少。可以使用一个二维数组,分别存储原定该周的酸奶制造成本,以及涮选后的酸奶制造成本,关于涮选后的酸奶制造成本可以这样涮选:与前一周的新的制造成本做比较 if (exp[i][0] >

2016-02-27 16:49:41 413

原创 POJ 3091 Stall Reservation

POJ 3091题目大意如下:农场主有N头牛,每头牛对于自己的供奶时间非常挑剔,只在固定时间内的某个空的隔间供奶。但是农场主有不能无限制的给每头牛分配供奶隔间,所以需要通过设计程序来求出一个最优的方案,使得使用最少隔间满足所有奶牛的要求。这是一个区间问题,问题给定每头牛的产奶时间段,首先可以根据每头牛的产奶时间段的下限优先排序(如果下限相同,再考虑上限)。之后在寻找最优方案的过程中,则可以

2016-02-27 14:39:06 450

原创 POJ 1328 Radar Installation

POJ 1328题目大意如下:给出N座小岛的坐标,以及灯塔的观察半径,需要建造最小数目的灯塔,使得所有的小岛都能在灯塔的观察范围之内这个问题可以换角度思考,因为已经知道小岛的坐标以及观察半径,所以可以算出以小岛为圆心,观察半径为半径的圆与海岸线的交点的横坐标,同时对每一个这样圆,记录酸楚的以两个横坐标(可以相等,也可以不相等)为上下限的区间,然后暴力穷竭解决:#include

2016-02-26 20:58:17 320

原创 POJ 2376 Cleaning Shift

POJ 2376题目大意如下:有N头牛要在指定的T时间以内工作,但是每头牛的工作时间区间给定了,同时在1~T这T个小时里面,每个小时都至少得有一头牛在工作,如果这种情况不恒成立,那么输出“-1”说明没有解决方案,否则,给出最佳解决方案:使用最少牛的头数观察到问题的规模并不大,所以可以用暴力搜索来做,但是要注意的一点是:在对这N头牛按照它们的工作时段来排序之后(我的排序是按照先排下限,在下限

2016-02-26 20:32:53 543

原创 POJ 3050 Hopscotch

POJ 3050题目大意如下:这也是一道暴力搜索,直接DFS,代码如下#include #include #include #include using namespace std;int dirX[] = {0, 1, 0, -1};int dirY[] = {1, 0, -1, 0};int Grap[6][6];int sum;map data;void df

2016-02-26 20:27:43 387

Mastring In Python Regular Expressions

英文电子版,非影印

2016-09-20

Python3学习手册(英文版)

还是英文版好

2016-04-18

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除