自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蚂蚁大战大象

https://github.com/zxjcarrot/

  • 博客(459)
  • 收藏
  • 关注

翻译 安全地转换成bool方法

第一次翻译水平很差,见谅.原文地址:http://www.artima.com/cppsource/safebool.html概要:在C++中,有一些为类对象提供布尔测试的方法.这些方法要么提供直观的用法,要么支持支持泛型编程.我们将会看到4种为惯用的if(object){}结构提供支持的方法.最后,我们将会讨论一种新的解决方法,这种方法没有前面4种方法的缺陷.目标有些类型

2013-08-09 14:17:39 1599

原创 通过反向ssh连接+socks5+web-proxy来访问内网资源

最近碰到个这么个问题,校园网内的资源只能在校园网内访问,在寝室里连不到校园网时候就无法访问了,很不方便。所以想了一个方案来解决这个问题。 所需硬件:一台有公网IP的linux主机 A,一台在校园网内的Linux主机 B。 所需软件:openssh, delegated. 思路1.通过从B建立一个反向ssh连接到A上,建立一个ssh连接 C。 2.在B上通过C运行ssh连接D(该连接用于sock

2015-11-08 21:48:45 4810

原创 多线程false sharing带来的影响和一些优化.

最近在线项目中测试一个无锁队列的性能的时候发现,在一个线程push另一个线程pop整型数据的时候,吞吐量竟然和std::queue+spinlock类似甚至更差,这样完全体现不出lockfree的优势, 决定找找原因. 这个无锁队列是通过一个头指针来push数据,一个尾指针来pop数据来实现的.template<typename T>class LockFreeQueue { struc

2015-09-09 22:08:15 1040

原创 likely, unlikely的作用

在项目中看到了likely、unlikely宏的使用, 一直不是很清楚它们的作用,所以就深究下。likely表示被测试的表达式大多数情况下为true, unlikely则表示相反。 两个宏定义:#define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __builtin_expect(!!(x), 0)这两个宏经常在条件转移的

2015-06-03 10:57:34 894

原创 设计实现OJ平台的遇到的一些问题和解决方法

需求毕业设计,实现一个能够自动编译、运行、监测程序运行使用资源、恶意系统调用的监控的一个OJ平台。 在设计实现的过程中的想法、碰到的问题、求解的过程以及解放方法,在这里记录下来。基础结构OJ主要由前端系统(WEB)和后端的判题程序构成,想法是后端的裁判程序做通用点,减少和前端系统的耦合,所以把后端给分离出来成一个独立的程序,大概的结构图是这样的。 解释下: 1. 前端其实可以由任何流行的

2015-05-04 20:40:51 5355 1

原创 Linux 2.6 内核阅读笔记 信号

2014年8月3日 信号处理程序调用过程当一个进程接收到一个信号时,需要暂停进程执行转去执行专门的信号处理函数(如果定义了这个信号的专门处理函数的话),然后再继续执行进程代码。所有的信号处理都是通过内核函数do_signal进行的,do_signal如果发现需要处理的信号,并且这个信号有专门的处理函数,就需要调用这个用户态的函数,这是通过handle_signal来处理的。执行信号处理函数

2014-08-03 18:33:37 979

原创 Linux 2.6 内核阅读笔记 内存管理

2014年7月29日 buddy分配算法内核需要为分配一组连续的页框提供一种健壮、高效的分配策略。分配连续的页框必须解决内存管理中的外碎片(external fragmentation)。频繁的请求和释放不同大小的一组连续页框,必然导致分配页框的块分算来许多小块的空闲页框无法被一次性大量分配使用。linux内核采用著名的伙伴系统算法来解决外碎片问题。该算法的核心思想是把所有的空闲页框分成1

2014-07-29 23:13:33 1003

原创 Linux 2.6 内核阅读笔记 时间度量

2014年7月27日

2014-07-27 17:14:18 582

原创 Linux 2.6 内核阅读笔记 内核同步

2014年7月26日 内核抢占和内核控制路径的设计内核抢占的一种定义:如果进程正在内核态执行内核函数时,允许发生内核切换(就是被替换的进程是内核函数所在进程),这个内核就是抢占的。linux内核提供了内核抢占的开启和关闭功能,在current_thread_info的preempt_count字段大于0时,内核就是不能抢占的。可以通过preempt_disable和preempt_

2014-07-26 22:49:12 701

原创 Linux 2.6 内核阅读笔记 中断和异常

2014年7月24日 中断门、陷阱门及中断门中断是可以禁止的,可以通过告诉PIC停止对某个中断的发布。被禁止的中断是不会丢失的,在解除禁止后又会发送到CPU上。禁止中断和屏蔽(mask)中断的不同之处是屏蔽是忽略掉某个中断,而禁止相当于延迟发送。Intel提供了三种类型的中断描述符:任务门、中断门及陷阱门描述。linux使用与inten稍有不同的细分分类和术语,把他们进行如下分类:

2014-07-24 22:52:47 745

转载 Updating Maven Project". Unsupported IClasspathEntry kind=4 错误解决方案

Please see https://bugs.eclipse.org/bugs/show_bug.cgi?id=374332#c14The problem is caused by the fact that the STS (the Spring IDE/Eclipse) uses the m2e(clipse) plugin but that eclipse:eclipse has

2014-07-23 16:16:19 461

原创 Linux 2.6 内核阅读笔记 进程

2014年7月22日 进程管理每个进程

2014-07-22 17:30:36 585

转载 Linux启动内存分配器

Linux启动内存分配器是在伙伴系统、slab机制实现之前,为满足内核中内存的分配而建立的。本身的机制比较简单,使用位图来进行标志分配和释放。一、数据结构介绍1,保留区间因为在建立启动内存分配器的时候,会涉及保留内存。也就是说,之前保留给页表、分配器本身(用于映射的位图)、io等得内存在分配器建立后,当用它来分配内存空间时,保留出来的那些部分就不能再分配了。linux中对保

2014-07-20 17:24:53 537

原创 spring mvc 控制器方法传数组对象的一些经验

因为项目需要在一个表单里面提交多个对象,比较好的做法就是直接在控制器方法参数里传一个数组。由于Spring mvc框架在反射生成控制方法的参数对象的时候会调用这个类的getDeclaredConstructor方法来获得构造函数。根据这个方法的jdk文档,这个类是一个数组对象时,这个方法会抛出java.lang.NoSuchMethodException,然后一直卡在这个问题。同事后来

2014-07-10 15:49:11 2067

转载 epoll不能用于monitor regular file

昨天看到TLPI书上的这个结论时,有些奇怪,为啥epoll不能作用于regular file呢?之前用select和poll的时候也没有这条限制啊。今天来了经过google学习,终于大概搞懂了。其实select和poll也是“不支持”对regular file进行监控的,只不过它们被设计为可以接受regular file的fd,只是默认对任何event都全部返回True。epoll在设计的时候,考

2014-06-21 15:37:25 1699

转载 例解 autoconf 和 automake 生成 Makefile 文件

引子无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或 make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以轻而易举的理顺各个源文件之间纷繁复杂的相互关系。但是如果通过

2014-06-17 20:32:21 512

原创 libevent的select backend的fd_set分配分析

最近在看libevent的源码,以前以为sele

2014-06-08 15:33:00 1071

转载 Linux下autoconf和automake使用

转自:http://hi.baidu.com/liuyanqiong/blog/item/0a6f0ad9d28e1d3d32fa1c7b.html  作为Linux下的程序开发人员,一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了. 在本文中,将

2014-06-06 19:50:23 416

转载 各个编译器预定义的表示编译器类型和版本号的宏

Most compilers defines macros to indicate the compiler and its version. These are useful to avoid bugs in certain compiler versions, or to check for the existance of certain features.Table of Cont

2014-06-06 17:30:15 2579

转载 模(%)运算 对 四则运算的封闭性(除法!)

首先想说的是, a%b. 一般都是a>0,b>0 或 a0.   其它情况就不要考虑了。 下面说明了为这么只需要考虑这两种情形。      其次,本文总结了模运算对加法、减法、乘法的封闭性。讨论是除法与模运算之间的关系,从而得到一个实用的公式。========================正文(精华在文末...)========================  

2014-05-16 18:48:43 2852 2

原创 UVA 10453 Make Palindrome(区间简单DP)

题意:给出一串字符串,求出需要至少插入多少个字符使得这个字符串变成会问粗

2014-05-01 10:42:26 513

原创 UVA 1291 Dance Dance Revolution(DP)

题意:一个跳舞机上有5个点,分别为central, top, bottom, left, right点,一只脚原地踏步需要1点体力,一只脚从central点上移到其他点上需要2点体力,从一个点上移动到相邻的点上需要3点体力,从一个点移动到对面的点上需要4点体力,初始的时候双脚都在central点上,给出一系列的舞步,求最少需要多少的体力来完成.思路:设dp[k][i][j]为在第k个舞步的时候

2014-04-25 20:11:44 719

原创 UVA 1351 String Compression(区间DP)

题意:给出一个字符串S,要求把字符串长度压缩的尽量短,如果有N个连续的字符串s相同,那么就可以把这多个字符串压缩成N(s),这样压缩后的长度为 N的位数+2(两个括号)+s的长度, 同样压缩后的N(s)还可以继续被压缩,求最短的字符串长度.思路:首先找出各个区间的最短周期串长度(即这个区间一个串循环多次组成),定义一个cycle[i][j]表示[i,j]区间的最短周期串长度.然后进行动态规

2014-04-25 16:30:21 712

原创 POJ 2948 Martian Mining(DP)

题意:(摘自刘汝佳的训练指南)给出n*m网格中每个格子的A矿和B矿的数量,A矿必须由右向左运输,B矿必须由下向上运输,管子不能拐弯或间断(即往上和往左的路线不能有交集)。要求使收集到的A,B矿总量尽量大。思路:考虑到管子不能转弯和间断,可以设dp[i][j]为以i,j为左下角的最大矿总量.开两个辅助数组A[i][j]为在i,j位置的时候建A管子的时候从i,j到i, 1的总和, B[i][j

2014-04-21 09:44:31 898

原创 UVA 11795 Mega Man's Mission(状态压缩DP)

题意:需要打败N个敌人,初始给出了一个武器,武器能打败一些敌人,打败一个敌人之后就能得到敌人的武器,其武器又可以大

2014-04-20 12:56:06 724

原创 UVA 1456 Cellular Network(贪心,DP)

题意:(摘自LRJ《训练指南》)手机在蜂窝网络中的定位是一个基本问题。假设蜂窝网络已经得知手机处于c1, c2,…,cn这些区域中的一个,最简单的方法是同时在这些区域中寻找手机。但这样做很浪费带宽。由于蜂窝网络中可以得知手机在这不同区域中的概率,因此一个折中的方法就是把这些区域分成w组,然后依次访问。比如,已知手机可能位于5个区域中,概率分别为0.3、0.05、0.1、0.3和0.25

2014-04-18 16:37:30 717

原创 UVA 11552 Fewest Flops(DP)

题意:输入一个正整数k和字符串S,字符串的长度保证为k的倍数。把S的字符按照从左到右的顺序每k个分成一组,每组之间可以任意排序,但组与组之间的先后顺序应保持不变。你的任务是让重排后的字符串包含尽量少的“块”,其中每个块为连续的相同字母比如,uuvuwwuv可以分成俩组:uuvu和wwuv,第一组可重排为uuuv,第二组可重排为vuww,连起来是uuuvvuww,包含4个块。思路:这

2014-04-18 10:49:38 860

原创 UVA 20002 Partitioning by Palindromes(简单DP)

题意:给出一个字符串,求能最少划分成几个连续子串,使得每个子串都是回文串.思路:设dp[i]为前i个字符划分的最优解,那么dp[i] = min(dp[i], dp[j] + 1)这里满足满足j + 1..i为一个回文串.可以用一个二维数组预处理求出x...y的串是否为回文串来做.#include #include #include using namespace std;

2014-04-17 17:16:43 593

原创 ZOJ 2846 Traverl(DP)

直接枚举每个城市作为起点,然后模拟是否能回到这个起点就可以了.

2014-04-09 20:51:54 728

原创 ZOJ 2771 Get Out of the Glass(DP)

题意:有一道光射入3层玻璃,光可以在任何两层玻璃之间反弹,求反弹N次有多少种不同的路径.思路:一块玻璃有正反面之分,如果光射在(或者反弹到)第i层的正面,那么只能是从第1至第i-1层的反面反射到第i面的正面上,同样第i层的反面只能是从第i+1到最后一层的正面上反射到第i层的反面上.设dp[i][j][2]表示第i次反射在第j层的正反面的路径数,那么答案就是sum(dp[n][i][0] +

2014-04-08 22:24:02 1275

原创 ZOJ 3769 Diablo III(DP)

题意:给出13类装备,每种装备都有攻击力和防御值,每种装备只允许选择一个,求满足防御值至少在M的情况下,攻击力最大为多少.有几个条件:13种装备里如果选择了双手装备,就不能选择武器和护盾了,还有戒指可以双手各带一个.思路:首先不考虑条件,设dp[i][j]为前i种装备,防御值达到j的时候的最大攻击力.那么可以有dp[i][j + t] = max(dp[i][j + t], dp[i

2014-04-08 21:00:52 1292

原创 ZOJ 1953 Advanced Fruits(LCS)

题意:给出两个字符串,求能满足子串(可以不连续)中包含给出的两个字符串的最短字符串.思路:本质上就是LCS问题,做法是先找出两个串的LCS,并记录其位置设dp[i][j]为A串以第i个字符结尾B串以第j个字符结尾的LCS, 用path数组来记录路径,如果A[i] == B[j] 那么dp[i][j] = dp[i - 1][j - 1].否则 dp[i][j] = max(dp[i

2014-04-07 21:41:28 821

原创 Codeforces 389A Fox and Number Game(贪心)

题意:给出一个序列X,能进行如下操作,选择两个下i, j(i != j), 将Xi的值减去Xj, 求怎么样操作能使的最后序列和最小.思路:做法是每次都找序列里最大的和次大的,最大的减掉次大的,如果都变成了相同的大小,就退出循环.#include #include #include using namespace std;const int MAX = 101;int X[MAX

2014-04-07 11:37:21 964

原创 Codeforces 414b Mashmokh and ACM(简单DP)

题意:一个序列B1,B2...Bl如果是好的,必须满足Bi | Bi + 1(a | b 代表a整除b), 求长度为K,元素大小小于N的序列个数.思路:看到数据的规模和取模1000000007就知道应该是数位DP了,设dp[i][j]表示以i做结尾长度为j的序列个数.那么答案就是sum(dp[i][K] | 1dp[i][j] = sum(dp[p][j - 1] | p满足p能整除i

2014-04-07 11:12:02 1376

原创 Codeforces 388A Fox and Box Accumulation(贪心)

题意:给出n个箱子,每个箱子都有一个力量值Vi,代表能支撑Vi个箱子,求能把这些箱子摆成的最少的堆数.思路:刚开始想着从大到小排序来做,从第i个箱子开始能放上去的就放上去,题目的最后一个数据很好的否定了这种做法.应该从小到大排序,记录当前堆的个数,能否把当前堆放到下一个箱子上,不能放就作为一堆.#include #include #include using namespace

2014-04-07 10:46:41 896

原创 Codeforces 385C Bear and Prime Numbers(素数打表,二分)

题意:给出n个数,m次查询,每次查询一个区间[l,r],求n个数中是区间[l,r]之间素数倍数的个数和,每个素数都要算一次和.解法:由于Xi最大为10^7,所以可以开一个这么大的数组,用筛选法求出素数和对应的和,最后查询的时候二分找素数位置.#include #include #include using namespace std;const int MAX = 10000001

2014-04-07 10:24:28 1441

原创 九度OJ 1537 买卖股票(DP)

题意:给出N天的股价,能买入和卖出股票,但是任何时候手上最多持有一份股票.允许交易K次求最多的收益.思路:设dp[i][j]为前i天交易j次的最大收益.那么dp[i][j] = max(dp[k][j - 1] - a[k + 1] + a[i], dp[i - 1][j]) 0这样的复杂度为O(KN^2),注意到在求dp[i][j]的时候dp[k][j - 1]都已经计算好了,所以可

2014-04-06 22:38:09 1362

原创 Codeforces 392B Tower of Hanoi(DP)

题意:在原来的汉诺塔基础上,给每次移动加上一个权值,Tij表示从rodi移动到rodj的花费.求把n个盘子从rod1移动到rod3上的最少花费.设dp[n][i][j]为将n个盘子从rodi移动到rodj上的最少花费.决策有两个.1.将rod1上的n-1个盘子移动到rod2上,将rod1上的最后一个移动到rod3上,再将rod2上的n-1个盘子移动到rod3上.2.将rod1上

2014-04-06 20:59:05 974

原创 ZOJ 2852 Deck of Cards(DP)

题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1852题意太繁琐就不讲了.设dp[q][i][j][k]表示前i张牌,每个卡槽的分值各为i,j,k时候的最能的多金钱数.dp[0][0][0][0]=0,其他设为-1.具体的转移方程看程序吧.#include #include #include

2014-04-06 19:34:24 1485

原创 ZOJ 2972 Hurdles of 110m(DP)

题意:刘翔跨栏问题,初始有M能量,有N块区域需要跑,在第i可以使用3种模式:1.Fast模式 通过第i个区域需要用T1[i]的时间,需要消耗F1[i]能量.2.Normal模式 通过第i个区域需要用T2[i]的时间,不需要消耗能量.3.Slow模式 通过第i个屈戌需要T3[i]的时间,能增加F2[i]能量,但是增加后的能量不能超过总能量M.求通过N个区域的最短时间.还是比较简单

2014-04-06 16:46:26 744

空空如也

空空如也

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

TA关注的人

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