自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ww32cc的博客

程序猿不会coding,跟咸鱼有什么分别

  • 博客(65)
  • 资源 (28)
  • 收藏
  • 关注

原创 求乘法逆元

若, 则称关于模的乘法逆元为,也可表示为,当且仅当时存在逆元。方法一:扩展欧几里得定理关于两个数的最大公约数,定存在两个数满足:,可能为负数。则当时,,则为模的逆元,为下面来推导存在什么样的关系,根据欧几里得定理上面的递推关系什么时候停止呢?在欧几里得算法求最大公约数时,算法最后停止于,而此时的系数一定满足:,为方便计算,可令。则根据递推关系,可以从最终状态推回到原始的。

2016-05-15 15:40:11 582

原创 Google APAC Test 2016 Not So Random 矩阵快递幂(logN复杂度)

题目描述:ProblemThere is a certain "random number generator" (RNG) which takes one nonnegative integer as input and generates another nonnegative integer as output. But you know that the RNG is re

2016-05-10 15:23:48 1948 3

原创 最近公共祖先(LCA)——离线Tarjan算法+并查集优化

LCA问题(lowest common ancestors):在一个有根树T中,两个节点和的

2016-04-12 22:23:44 2754

原创 数组中只出现一次的三个数(简单解法)

一个int数组中除了三个数之外,其他数字都出现了两次,找出这三个只出现一次的数。思路:只有一个数只出现的情况下,对所有数进行异或,异或的结果即为所求;只有两个数只出现一次的情况下,一个数的我们会做了,两个数的话,如何将这些元素拆分成两组,使得这两个数分布在这两组中,然后就可以一一求解。还是从所有数异或的结果入手。由于这两个数不相等,所以异或的结果一定不为0,等价于:这两个数一定存在某一个bit

2016-03-19 10:50:06 1765

原创 双向BFS及优化

单向BFS只从起点一端开始搜索,双向BFS则是从起点和终点两边扩展节点,当节点发生重合时即找到最优解。假设起点到终点深度为d,每个节点平均有n个分支,那么单向BFS需要扩展的节点个数为。而从起点终点同时扩展,则只需。实现方法为:维护两个队列,分别保存从起点和终点扩展到的下一层,这样保证了两个队列中的节点处于相同的深度(即:距离起点或者终点深度相同)。则当拓展到时一定发生重合,得到最优解。代

2016-02-27 16:33:04 7337

原创 LeetCode Largest Number 贪心

将数组中的元素进行重排,组成最大的数。如果只有两个数,可以简单判断:,使用贪心,将数组中的元素按照上述比较规则进行降序排序,进行拼接即为所求。证明如下:假设按照贪心得到的最优解为:(其中),若存在解(和交换位置)比更优。令和之间一共位,则有:

2016-02-10 22:03:41 494

原创 Moore's majority vote algorithm

求n个数中出现次数超过

2016-02-08 11:19:23 376

原创 Morris traversal

对于二叉树遍历,现有的很多算法大多基于栈,递归或者迭代。下面是中序遍历的迭代版本:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(

2016-01-03 21:00:12 507

原创 LeetCode Wildcard Matching DP/贪心

这道题按理来说应该是Regular Expression Matching的简单版,但是测试数据较多较复杂,用普通的dfs会超时,常规dp会超内存,因此需要进行额外的处理。方法一:DP常规DP使用二维数组表示s中前i个字符和p中前j个字符的匹配情况,但其实存在冗余,具体可以观察动态转移方程:其实当前状态至多与前一轮的状态相关,将i作为外层循环的话,要求解,只需,令表示前一轮(s

2015-12-19 22:09:16 897

原创 STL源码——list sort:归并排序的非递归实现

由于STL中提供的sort算法是用在RandomAccessIterator上的,而list迭代器不具备随机访问的特性,所以对list进行排序不能使用algorithm中的sort算法,而应该使用list的成员函数sort。对list进行排序,最直接的想法就是用MergeSort,但是每次找中点就需要O(n),可能考虑到这点,成员函数sort并没有采用这种方式实现,而是用了非递归版的MergeSo

2015-12-13 13:45:59 768 1

原创 LeetCode Longest Valid Parentheses 括号匹配

括号匹配问题一般的处理方式有两种:①使用栈的push/pop模拟;②给括号赋予正负的分值(+1/-1),从左到右计算分数之和。一个合法的串中任意位置的分数不会小于0(左括号数大于等于右括号)。题意:给定一个由“(”和")"组成的字符串,求最长合法子串的长度。栈一般用来判定括号序列是否合法,这里使用第二种方法。从左到右扫描一遍,遇到分数小于0则跳过该位置,从下一个位置起继续向右扫描,遇到分数

2015-12-06 20:51:25 489

原创 C++常量折叠

编译阶段遇到对const常量的引用时,编译器直接查找符号表,用符号表中的值进行替换。而为了让别的单元对这个常量进行引用,必须提供这个常量的地址,所以要分配内存。由于提供了地址,出于对const常量的保护,即使指向该地址的指针改变了该内存单元的值,const常量的值不变(遇到对该变量的引用,用符号表值替换)。所以在运行阶段,const常量所在地址的内存内容可以发生改变,而const常量的值始终保持不

2015-11-30 20:12:58 392

原创 C++中的临时对象temporary object

Thinking in C++ P368页关于Temporaries的论述中写道:But there is one thing about temporaries:they’re automatically const. Because you usually won’t be able to get your hands on a temporary object,telling it to

2015-11-30 17:14:09 1811

原创 C++返回值优化

当函数需要返回对象时,通常有两种写法,一种是直接在return语句中返回一个对象,一种是先构造好一个对象,然后在return中将其返回。以下代码为例:#include #include using namespace std;struct Node{ string name; int x, y; Node(string na = "", int xx = 0, int yy =

2015-11-30 16:19:09 1188

原创 LeetCode Linked List Cycle II

题目描述:Given a linked list, return the node where the cycle begins. If there is no cycle, return null.Note: Do not modify the linked list.若存在环则输出环的起点,若不存在则输出NULL。由于是在判断环的基础上输出环的起点,因此仍使用Linked List C

2015-11-15 19:23:26 414

原创 LeetCode : Regular Expression Matching DFS/动态规划

思路:由于*匹配存在不确定性,所以使用常规解法比较麻烦。由于问题可以分解,若S的前i个字符与P的前j个字符已经匹配,则只需考察剩余的字符即可。从这个特点上,可以使用DFS。而由于无后效性,所以也可以使用DP。1.DFS解法讨论p当前位置处的字符,若为'*',则s可以与p匹配0个或若干个字符,否则各自移动一个位置,对剩下的字符串递归处理。代码如下:class Solution {p

2015-10-25 19:02:19 1031

原创 STL源码——function adapter函数适配器/函数配接器

function adapters是指能够将function objects(函数对象)与另一个function objects、某个值、某个一般函数结合起来的function objects。通过function adapters可以把多个function objects结合起来,形成强大的表达式。使用时包含头文件即可。通过function adapter的绑定、组合、修饰能力,可以创造

2015-10-21 21:43:27 454

原创 STL源码——排列生成算法(next-permutation、pre-permutation)

排列生成算法有三种:序数法、字典序法、换位法。本文只讨论前两种较常用的方法。一.序数法所谓序数,指的是某个排列在这n的数的所有排列中按字典序排序的序数。已知一个排列,可以用康托展开求其序数。假设排列为,这个排列对应的序数为。其中表示位于第i位右边比小的元素的个数,排列组合意义上理解:设当前排列,考察第位,第位比小的排列的一定比小,第位有中情况,后面的位的情况为,所以在位比排列小的排列有

2015-10-11 16:46:23 887

原创 hdu5501 The Highest Mark 贪心+动态规划

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5501思路:首先将问题简单化,每道题有ti的时间消耗,给定T时间内要完成若干题目使得分值最大,很容易想到背包问题。但是本题中的value是随着时间减小的,因此背包的顺序也会影响最优值。如果物品数量的规模在16左右,可以使用状态压缩来做:,其中,dp[i][j]表示j分钟结束时状态为i,k为题目的标号

2015-10-11 14:37:31 387

原创 hdu5500 Reorder the Books 贪心

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5500思路:问题等价为,一个1~n组成的序列,每次从中取出一个数,插到最前面,用最少的步骤使序列变为升序。其实在整个操作过程中,我们只需要保持相对顺序即可。每次操作保证pos[i - 1] < pos[i],即:i - 1出现在i的前面。如:首先检查n - 1是否出现在n前面,不是的话将n - 1移

2015-10-11 10:03:35 403

原创 STL源码—— rotate算法理解

rotate算法实现了区间内元素的循环移位,将[first, middle)内的元素和[middle, last)内的元素互换,middle所指的元素会成为容器的第一个元素。如下图所示:由于不同迭代器造成算法的效率有所不同,因此设计为双层架构。templateinline void rotate(ForwardIterator first, ForwardIterator m

2015-10-09 16:29:57 978 1

原创 manacher算法 O(n)求最长回文子串

朴素的做法是求出以每个字符为中心的回文串长度,复杂度为,还需要考虑奇数长度和偶数长度。而manacher算法可以在O(n)时间内求解,奇数长度和偶数长度可以统一处理。根据回文串的对称性,避免了大量不必要的比较。处理技巧:①相邻的字符之间插入一个分隔符,串的首尾也要加,以“#”为例,则长度为n的字符串经过处理之后变成2n+1奇数长度的字符串。为防止向两边扩展时越界,可以在首尾处加两个不匹

2015-09-29 20:30:24 484

原创 Nim博弈及其扩展

1.定义有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被拿空了,则判负。2.局面给出如下定义:P-Position:Previous-player 刚刚走过的选手得胜的局势;N-Position: Next-player将要走的选手得胜的局势;终结状态:没有合法的操作集。由Nim的定义,终结状

2015-09-21 17:10:04 1187

原创 树状数组及其应用

树状数组是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位置之间的所有元素之和,每次可以修改某一处元素的值。以下是树状数组的存储方式(图片来源于互联网)可以看出:C[1]=A[1]C[2]=A[1]+A[2]C[3]=A[3]C[4]=A[1]+A[2]+A[3]+A[4]C[5]=A[5]C[6]=A[5]+A[6]C[7]=A

2015-09-21 09:57:38 433

原创 STL源码——RB-Tree insert操作

看STL源码剖析时,真正的插入函数__insert(base_ptr x, base_ptr y, const value& v)时,发现参数x几乎没什么用,查了一些资料,发现x是在调用另一个insert重载函数时发挥作用的,于是整理了一下insert函数。

2015-09-17 19:48:09 1725

原创 STL源码——SGI 空间配置器

由于小型区块分配时可能造成内存破碎问题,SGI设计了两级配置器,第一级配置器直接使用malloc和free,第二级配置器则视情况采取不同的策略:当配置的区块超过128Bytes时,调用第一级配置器;当配置区块小于128Bytes时,采用复杂的内存池整理方式,而不再求助于第一级配置器。使用第一级配置器还是同时开放第二级配置器,取决于__USE_MALLOC是否被定义。#ifdef __USE

2015-09-10 19:53:43 877 1

原创 deque及迭代器失效问题

deque由一段一段的定量连续空间构成,采用一个表(map)来记录每个连续空间的首址,map是一小块连续的空间,目的是便于迭代器的寻址(map+1即可跳转到下一个连续空间的首址)。map中的每一个元素(node)都是指针,指向另一端(较大的)连续线性空间,称为缓冲区,缓冲区才是deque的储存空间主体。具体机制如下所示:其中,对迭代器it的解引用得到的是cur位置处对应的元素。de

2015-09-05 15:18:04 4903

原创 poj1184 聪明的打字员 BFS+剪枝

思路:题意很直观,用密码+光标位置来表示状态,对光标所在位置分别进行六种操作,得到新状态入队。但一共有1000000*6种状态,所以需要剪枝。由于swap0和swap1这两个交换操作只对光标处和0, 5位置的数字有效,当光标在j处时(0代码如下:#include #include #include using namespace std;#define N 1000005#d

2015-08-26 22:18:56 1428 1

原创 poj3635 Full Tank? 最短路+dp

思路:根据题意很容易想到动态规划方程,,状态dp[i][j]表示到达i时油量剩余j,但是复杂度太高。从另一个角度想,由一个最优解产生另一个最优解,每次取最优解的节点进行扩展,类似dijkstra最短路。具体处理如下:每次取一个最优节点出队,则节点为队中到源点花费最小的,在该状态下,可以选择购买1单位的油,也可以走向其邻节点。为什么是购买1单位的油?假设此时队首油量为j,在该点最多可以购

2015-08-26 09:36:58 515

原创 通过reverse_iterator的base()得到iterator

调用reverse_iterator的base成员函数可以产生“对应的”iterator。vector v;v.reserve(5);for(int i = 0;i < 5; ++ i) { // 向vector插入1到5v.push_back(i);}vector::reverse_iterator ri = // 使ri指向3find(v.rbegin(), v.rend(),

2015-08-14 18:33:02 3330 1

原创 Codeforces Round #291 (Div. 2) D. R2D2 and Droid Army RMQ/单调队列/尺取法

题意:M种detail的序列,求这样的区间:区间内每种detail的最大值之和小于数值K,求区间的最大长度。解法一:二分+区间最大值(RMQ或单调队列)由于是求最大长度,而给定一个长度我们可去check是否为合法解,所以可以使用二分。①区间最大值RMQ问题可以使用线段树、ST算法(sparse table)降低查询复杂度。线段树和ST算法预处理需要O(nlogn),线段树查询需要O(l

2015-08-10 15:53:50 598

原创 尺取法

尺取法一般用来求解最大/最小区间问题。用两个指针代表区间的首尾,反复地推进区间的开头和末尾,来求取满足条件的最小/大区间,复杂度为O(n)。       当一个区间满足条件时,左指针推进,判断新区建是否满足条件,如果不满足条件,那么区间末尾向后扩展,直到满足条件为止。这样在区间推移过程中我们就得到了很多满足条件的区间,根据题意取最优即可。    当满足以下条件时,可以使用尺取法:若从开始,

2015-08-10 14:52:07 572

原创 单调队列及优化DP poj2823/poj1821/poj2373

用于求解某个元素所在的一定区间内的最优值。队列中存放元素索引,因为要根据区间来将无效的队头出队。应用一:求滑动窗口内的最大/小值题目链接: poj2823 Sliding Window    当区间长度固定时,对第i个元素,有效区间为[i - k + 1, i]。以最大值为例,维护一个单调下降的队列,存放当前的最大值、次大值……    从左至右扫描数组,每次将a[i]与队尾j比较,

2015-08-07 17:39:42 507

原创 单调栈

从某一个元素开始,以该元素为最值,一直向前延伸找最优值(若需要两个方向的解,则再从右往左扫描一遍即可).每个元素最多进出栈一次,复杂度O(n)应用:①栈维护上升序列求解不小于i的最大区间: hdu1506 Largest Rectangle in a Histogram 求直方图能覆盖的最大矩阵的面积,则矩阵的高度为其中直方图中的最小高度。对某个直方图h[i],向两边搜寻不小于该高度的

2015-08-06 13:31:08 406

原创 Codeforces Round #291 (Div. 2) C. Watto and Mechanism Trie字典树+dfs

思路:由于字符串长度上限为6*10^5,直接比较十分耗时。所以使用trie进行查找。

2015-08-04 15:56:35 604

原创 Codeforces Round #290 (Div. 2) C. Fox And Names 拓扑排序

思路:对相邻两行,当s1[i]≠s2[i]时,新的字母表中s1[i]必须出现在s2[i]的前面,显然是拓扑排序。所以枚举相邻的两行,构造有向边统计入度。拓扑排序:每次从图中拿走一个入度为0的节点,并删除所有从该点出发的有向边。若最终输出的节点个数小于总个数,证明存在环。代码如下:#include #include using namespace std;#define N 1

2015-08-03 15:28:19 427

原创 Codeforces Round #288 (Div. 2) C. Anya and Ghosts 贪心

思路:由于一个candle只能覆盖t,所以对某一时刻w[i],最早的candle点亮时间不超过w[i] - t。否则w[i]时刻该candle已经熄灭。所以对每个w[i],统计w[i] - t ~ w[i] - 1之间有多少根蜡烛被点亮即可。若已有r个candle,不做任何处理。否则,由近及远点亮需要的candle。代码如下:#include using namespace std;

2015-08-02 14:40:33 467

原创 remove算法和erase成员函数

1. remove算法和容器的erase成员函数remove 操作移除[first,last)之中所有与value相等的元素。这一算法并不真正从容器中删除那些元素(换句话说容器的大小并没有改变),而是将每一个不与value相等的元素轮番赋值给first之后的空间。也就是说,所有和value相同值的元素都会被覆盖,而其他的元素都会依次前移。最后remove返回"指向最后一个   '有

2015-07-31 15:07:08 670

原创 Codeforces Round #287 (Div. 2) C. Guess Your Way Out! 二叉树遍历

思路:由样例可知,若exit和实际command在当前的父节点两边,则父节点一侧的子树节点必须全部遍历一遍,才会再次返回到父节点,从而转向正确的方向。故先求出exit的正确路径,然后与command相比,①若相同,则只需沿着command走,ans++②若不相同,则ans += 父节点左侧子树的节点数代码如下:#include using namespace std;#de

2015-07-31 14:25:55 495

原创 Codeforces Round #286 (Div. 2) C. Mr. Kitayuta, the Treasure Hunter dp+范围压缩

思路:题目很直观,用dp[i][j]表示走到第i个island,jump值为j时的最优值,但是状态的数据量均为30000,超内存。由于d每次最多只能改变1,考虑d改变的最大幅度。设到达终点需跳x次,则有:当d = 1时,x dp[i][j]表示到达第i个island,jump值为d + (j - 250)时的最优解,求解时注意状态的有效性即可。 代码如下:#include #

2015-07-30 13:08:59 693

More Effective C++ 英文版pdf

Scott Meyers所著,More Effective C++ :35 New Ways to Improve Your Progra。文字版pdf,超清可编辑。找了好久才找到的

2015-11-03

嵌入式Linux设备驱动开发详解光盘 李俊

本书详细讲解了嵌入式Linux的各种设备驱动,包括字符设备驱动、数字显示驱动、键盘驱动、A/D驱动、D/A驱动、LCD驱动、触摸屏驱动、CAN总线驱动、IIC总线驱动、音频总线驱动、IDE接口驱动、闪存芯片驱动、USB驱动、串口驱动、网络设备驱动等,光盘中包含以上所有实例,对新手来说有很好的参考价值

2013-06-26

javaSE7.0帮助文档

Java™ Platform, Standard Edition 7 API Specification官网overview的界面一样,chm格式,使用索引功能也不生成chw文件.不过是英文版的,个人感觉很好用。

2013-06-01

tcnative-1.dll 1.1.24(win32)

解决问题:在启动Tomcat 7.0时发现第一条信息便是: The Apache Tomcat Native library which allows optimal performance in production environments was not found 。将tcnative-1.dll文件放入tomcat/bin目录中,即可解决问题

2013-05-23

网络安全基础:标准与应用第三版课后习题答案

网络安全基础:标准与应用第三版课后习题答案 作者William Stallings课后习题答案,不是思考题

2013-05-04

PuTTY 0.62 中文版 下载

PuTTY: 自由的 Telnet/SSH 客户端(中文版) PuTTY 是自由的跨平台 Telnet/SSH 客户端,同时在 Win32 和 Unix 系统下模拟 xterm 终端。其主要作者是 Simon Tatham。

2013-03-31

疯狂法java讲义第二版源代码

疯狂java讲义第二版源代码,随书附赠的光盘,包含书中所有程序详细代码

2013-03-31

OpenSSH3.8.1及配置

openssh3.8安装文件以及详细配置过程,还有常见的错误解决方法,从网上资料中整理的,省去了openssh服务器开启失败的弯路

2013-03-31

MASM32开发包及重定位总结

MASM32开发包+edit plus+编译链接说明+重定位技术的讨论

2013-03-19

应用密码学源代码

应用密码学一书中所有的源代码,包括des、aes、rsa、idea等等

2013-03-17

计算机网络第五版英文原版

Andrew S.Tanenbaum,+David+J.+Wetherall

2013-03-17

最长递增子序列

用动态规划实现最长递增子序列的求解,并回溯输出最长公共子序列

2013-03-17

0-1背包问题

用动态规划实现0-1背包问题,输入背包重量与价值、重量限额,尽可能多的选择最大价值的组合

2013-03-17

活动选择问题

用贪心算法实现活动选择问题,在截止时间前尽可能多的选择活动

2013-03-17

选出第K个数

随机生成若干个数,用快速排序选出第K个数

2013-03-17

java编写的人事部门管理程序

用java编写的简单的人事部门管理程序,具有添加、查询、删除、保存文件、打开文件功能

2013-03-17

汇编语言实现冒泡排序

用汇编语言编写的冒泡排序,从键盘上输入若干数字,进行冒泡排序后将结果显示在屏幕上

2013-03-17

汇编语言实现N!阶乘

用汇编语言编写的求N的阶乘小程序,在屏幕上输入0-9的数,求阶乘,并将结果显示在屏幕上

2013-03-17

C语言实现socket通信

实现客户端、服务器相互通信功能,在telnet连接localhost可以成功收发消息

2013-03-17

距离向量路由算法实现

用弗洛伊德最短路径,实现的距离向量路由算法

2013-03-17

进程调度_抢占式短作业优先算法+内存管理

操作系统实验,抢占式短作业优先算法,结合内存管理,实现进程调度

2013-03-17

中南大学数据结构实验+课程设计

实验主要是链表、顺序表的操作,课程设计是“运动会管理系统”+"抽签游戏"

2013-03-17

中南大学算法分析与设计实验报告

3次实验,7个程序,“用3种方法求出一堆数中第K个数”、“活动选择”、“最长公共子序列”、“连续背包问题”、“0-1背包问题”

2013-03-17

中南大学09、08级离散数学试卷

中南大学离散数学期末试卷,每年题目都差不多,极具参考价值

2013-01-13

数据结构》算法实现及解析_高一凡.pdf

数据结构 严蔚敏版,教材中的是伪代码,本书全部实现,有详细代码

2012-12-11

Intel 汇编语言程序设计(作者欧文)课件+课后答案

我们老师根据Intel汇编语言程序设计上课用的课件,重点更突出,简单易懂。附该书课后习题答案

2012-11-11

Pro Android 3英文原版电子书PDF文件

涵盖了100多个主题(1200余页),介绍了分别针对移动电话和平板电脑而优化的Android2.3和Android3.0。寓教于乐。作者通过妙趣横生、切实可行的示例,向读者展示了如何使用Google"最新的Androld3.0SDK。构建贴近实际且意趣盎然的应用,深入全面地介绍了为嵌入式设备、手机、平板电脑构建应用所需的一切知识,同时介绍了自定义3D组件和多任务等高级主题。

2012-11-11

空空如也

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

TA关注的人

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