自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 安装RegExr

RegExr是一个编写和测试正则表达式的应用。它由Grant Skinner编写,首先是网页版本的:网址为http://gskinner.com/regexr。现在已经有了第二版,右上角有选项可以进入第一版。然后要下载它的桌面版,以便在不上网的时候也能用这个工具。在它的网页版第一版的右下角有链接可以下载桌面版,但是成功安装之前需要先安装好Adobe Air。Adobe Air的安装步骤

2015-08-31 13:59:21 955

原创 poj 3659 树形dp(树上的最小支配集)

题意:求树的最小支配集。思路:动态规划。一开始每个点只取了两个变量,表示在以其为根的子树中选择和不选择该点的最少点数。由一组数据(6个点的路径)发现了问题,考虑第3个点的时候,如果不选择此点,那么第4个点必须要选取,实际上这是不必的。该组数据的最优解是选择第2和第5个点。那么每个点加上一个变量好了:dp1[x]表示选择第x个点。dp0[x][0]表示不选择第x个点,而且该点并没有被

2015-08-29 17:41:14 390

原创 poj 3661 dp(Running)

题意:Bessie参加跑步比赛,每一分钟可以选择跑或者休息,同时给出每一分钟如果跑的话,可以跑的距离:跑的话,疲劳度会加1;休息的话,疲劳度减1;且疲劳度不可以超过m。跑完后疲劳度必须为0,求满足条件可以跑得最远距离。思路:我自己按照直观想的3维dp。dp[i][j][0] 表示第i分钟之后,疲劳度为j,且第i分钟在休息的最大值;dp[i][j][1]表示第i分钟之后,疲劳度为j,且第i分钟在

2015-08-29 15:27:37 272

原创 poj 3670/3666 dp(吃饭的顺序/加强版)

题意:已知n个牛每个牛有一个组号1~3。现在他们排成一排准备吃饭。现在要通过改变他们的组号使得这排牛的序列是递增的或者递减的,问需要的最少改变数量。思路:简单dp,O(n)可解,dp[i][j]表示第i头牛编号为j时所需要的最小改变量,递推方程见代码即可。然后将原数组逆序再做一遍。另外的思路:用n-最长不下降/不上升子序列的长度。#include #include #include

2015-08-29 10:31:54 416

原创 poj 2403 map

题意:给出一些单词和整数对作为词典,再给出若干文章片段,求文章的值。值为其包含的在词典中出现的单词对应的数字之和。思路:词典用map来存储即可。注意可以直接用char*来作为map的键。另外摘自(http://www.cnblogs.com/zhixing/archive/2013/06/04/3116814.html)的char*和string之间的转换方式。1. string转cons

2015-08-27 08:50:13 331

原创 poj 3349 hash(相同雪花)

题意:一个雪花由6个[0,10000000]之间的数字来描述。两个雪花相同当且仅当他们对应的6个数字按顺序相等(这个顺序可以是顺时针的也可以是逆时针的)。给定n(n思路:直接暴力n^2会超时。我的做法是将每个雪花的6个数字加起来作为hash值,然后排序,对于hash值相同的再进行暴力判断。#include #include #include #include #include #

2015-08-26 11:12:37 458

原创 poj 2249/1942 求组合数

题意:2249就是纯粹求组合数。1942说有一个n*m的方格,问从左下走到右上(只能向右或者向上走)有多少种走法。思路:对于1942来说,就是C(n+m,n),相当于有一个n+m长的序列,选出n个位置向右走,剩下的必然就是向上走。这两道题开long long即可。计算的时候注意除的时候从小到大(即从1到n),这样可以保证每次都是整除。比如求C(n,m),第一步n/1,第二步n*(n-1)/

2015-08-26 09:18:08 330

原创 poj 1852 脑洞大开(Ants)

题意:有一个一维的数轴,给定其长度len(数轴范围为[0,len])和上面的蚂蚁数n。接下来给出n只蚂蚁的坐标,都位于整数点之上。蚂蚁的移动速度为1,两只蚂蚁迎面相遇立即朝相反方向运动。假设蚂蚁的初始方向未知,问所有蚂蚁掉落数轴的最小和最大时间。思路:最小时间比较显然,就是所有蚂蚁不碰撞,即偏左的蚂蚁向左走,偏右的蚂蚁向右走(这样想,一旦出现蚂蚁相遇,那么这两只蚂蚁掉落走过的距离之和=len,

2015-08-26 08:57:09 424

原创 poj 1111 dfs(求连通块周长)

题意:先输入一个矩阵,再输入一个起始位置,然后输出与这个X在八个方向能够连起来的所有X组成的图形的周长。思路:找到这个连通块显然深搜即可。找周长也很简单,只要对每个位置看看其四周是否不为X,如果是,周长加1。程序里将所有位置初始化为‘.'方便判断。#include #include #include #include #include #include using namesp

2015-08-26 08:32:46 497

原创 poj 2242 数学(给三点求外接圆周长)

题意:给定不共线的三点坐标,求其外接圆的周长。思路:通过坐标可以求出三点围成三角形的面积S。根据正弦定理有a/sinA = 2*R,根据面积公式有S = (bcsinA)/2。消去sinA可得关于R的等式,进而可求周长。#include #include #include #include #include #include using namespace std;#defi

2015-08-25 21:30:36 665

转载 MFC中改变编辑框文字大小、颜色的方法

改变大小:步骤一:在Dlg类(在***Dlg.h中)中增加一个类成员变量: CFont m_editFont;注意:这里Font对象必须是类成员变量,不能是局部变量,否则会出现只改变了光标的大小,而不能改变字体的大小。步骤二:在OnInitDialog(位于***Dlg.cpp中)方法中增加下列语句:m_editFont.CreatePointFont(180, "宋体");m

2015-08-25 17:35:20 1208

原创 poj 1151 线段树+扫描线(Atlantis矩形面积)

题意:给定n个矩形 (n思路:线段树+扫描线。用一条直线从左到右扫描,碰到一条矩形竖边的时候,就计算该直线有多长被矩形覆盖,以及被覆盖部分是覆盖了几重。碰到矩形左边,要增加被覆盖的长度,碰到右边, 要减少被覆盖的长度。每碰到一条矩形的纵边,覆盖面积就增加 Len * 该纵边到下一条纵边的距离。Len是此时扫描线被矩形覆盖的长度。在Y轴进行离散化。n个矩形的2n个横边纵 坐标共构成最多2n-

2015-08-25 16:09:10 400

原创 poj 2033 dp 正确的解码方法数

题意:给定一种英文的编码方式,a编码为1,b编码为2...z编码为26。那么一串数字可以有不同的解码方式(比如26,可以译为z,也可以译为bf)。给定一个合理的数字串,问解码的可能个数。思路:dp[i]表示s[1]...s[i]这些串能够组成的串的个数。那么如果s[i]=0,那么它必然不可能单独组成字符;如果不为0,那么它可以单独组成字符,即:dp[i]+=dp[i-1]。再考虑连字符情况

2015-08-25 09:31:12 347

原创 poj 2506 递推+大数

题意:用2*1或者2*2的砖铺2*n有多少种铺法。思路:容易知道递推式为f[n] = 2*f[n-2]+f[n-1]。用数组表示即可。#include #include #include #include #include #include using namespace std;#define clc(s,t) memset(s,t,sizeof(s))#define I

2015-08-24 22:38:20 490

原创 poj 1260 dp(买珍珠)

题意:一共有n类珍珠,给出每类珍珠需要的数量,以及它们的单价。按照单价递减的顺序给出。要求用最少的钱买到相同数量的,相同(或更高)质量的珍珠。规定买任一类的珍珠n个(价格为p),都要支付(n+10)*p的钱,即额外支付10*p。(题目描述里有一个例子解释)思路:首先容易知道,单价最高的珍珠只能用它的单价买到。那么第二高的珍珠或者自己单独买,或者用第一高的价格买到。根据这个思路,设计dp。dp[

2015-08-24 19:06:40 377

原创 poj 2051 priority_queue应用

题意:每一行输入一个编号,再给定它每一次出现的间隔时间,最后以“#”结束。之后是m次查询,根据他们出现的时间从早到晚把前m个编号打印出来,若在同一时间有多个编号,那么先输出小的编号。思路:用优先队列维护时间点,每次堆中最小的输出,然后加上间隔再push进去即可。#include #include #include #include #include #include using

2015-08-24 16:09:14 375

原创 poj 1183 数学推导(反正切函数的应用)

题意:根据角度和的正切函数公式tan(a+b)=[tan(a)+tan(b)]/[1-tan(a)*tan(b)] 公式,通过简单的变换得到: arctan(p)+arctan(q)=arctan[(p+q)/(1-pq)] 公式(4)如令p=1/2,q=1/3,则(p+q)/(1-pq)=1,有 arctan(1/2)+arctan(1/3)=arctan[(1/2+1/3)/(1-1/

2015-08-24 15:21:37 655

原创 poj 2602 大数相加(字符串输出)

题意:赤裸裸大数相加。思路:一开始以为是水题,结果提交发现居然是TLE。查看discuss才知道,最后应该用字符串输出,一位一位的int输出就会TLE。代码保留着一开始int的做法,只不过最后用字符串输出。#include #include #include #include #include #include using namespace std;#define clc(

2015-08-20 19:39:52 459

原创 poj 2985 树状数组+并查集(第k大组数)

题意:一开始有n个数,有两种操作,0 a b表示将a所在组和b所在组合并,1 a表示查询当前的第k大组数有多少个。思路:合并集合很简单用并查集即可。查询的方法是:用树状数组记录数集中某个数出现次数,即tree[i]表示含有i个数的组有多少个。查找的时候二分即可。#include #include #include #include #include #include using

2015-08-19 19:58:00 467

原创 poj 1915/2243 bfs(马走日)

题意:给定一个n*n的棋盘,一个起点坐标,一个终点坐标。问从起点“走日”到终点的最少步数。走日即象棋里的马走日。思路:bfs水题。#include #include #include #include #include #include using namespace std;#define clc(s,t) memset(s,t,sizeof(s))#define INF

2015-08-18 16:42:33 1277

原创 poj 1844 数学(1+/- ... k)

题意:给定一个数n,问其由1 2 3 4 .......k中间加上加号或者减号来表示的最小k值。比如12 = -1+2+3+4+5+6-7。思路:一开始直接用类似背包的思路,TLE。实际上,找到第一个k,使得前k项和S≥n,在前面减去(S-n)/2即可。所以对S-n的奇偶性进行分类,如果是偶数,则可以。如果S-n是奇数,那么再看看k是奇数还是偶数,决定了需要再加上一个还是两个数才能使得S-n变

2015-08-18 15:37:33 323

原创 poj 1799 几何(大圆套小圆)

题意:在大圆内欲摆放多个相同半径的小圆,使得各小圆之间相切,与大圆外切。给定两个参数:大圆的半径R和需要摆放的小圆个数k,问小圆半径最大为多少。思路:如果保证小圆之间相切且与大圆相切,那么连接相邻两个小圆的圆心,再分别连接这两个圆心和大圆圆心。这个等腰三角形的底边必然等于小圆半径的二倍(否则小圆不相切)。由此可得等式:等腰三角形腰长*sin(顶角/2)=小圆半径。即(R-r)*sin(2π/2

2015-08-18 09:34:47 3865

原创 poj 1047 模拟(含大数乘法)循环数

题意:给定一个不超过60位的数,判断它是否是可循环的。如果输入字符串num的长为n,则判断num*1,num*2,num*3...num*n,如果每次乘法得到的结果都是num的一个循环,则num为循环数。如:142857 *1 = 142857142857 *2 = 285714 142857 *3 = 428571 142857 *4 = 571428 142857 *5 =

2015-08-18 09:09:24 362

原创 poj 1141 dp(补成最短的规范字符串)

题意:给定一个由'(' , ')' , '[' , ']'四个字符组成的字符串s,求一个最短的合乎括号规范的字符串t,使得s是t的子序列。合乎规范的串的定义是:1. 空串。 2. 若S合乎规范, 那么(S) 和[S] 都合乎规范。3. 如果A 和 B 都合乎规范,那么AB 合乎规范。Sample Input([(]Sample Output()[()]思路:采用动态规划

2015-08-17 17:41:52 378

原创 poj 1032 拆分数字使乘积最大

参考:http://www.cnblogs.com/rainydays/archive/2012/12/17/2821428.html题意:给出一个数n,将其拆分为若干个互不相等的数字的和,要求这些数字的乘积最大。分析:我们可以发现任何一个数字,只要能拆分成两个大于1的数字之和,那么这两个数字的乘积一定大于等于原数。也就是说,对于连乘式中,如果将一个乘数a更换为两个数字b×c(a=

2015-08-17 10:50:25 2952

原创 poj 2229 dp(分解为2的幂)

题意:问把一个整数分成若干2的幂之和有多少种分解方法?思路:如果i为奇数,肯定至少有一个1。那么dp[i]=dp[i-1],构造方法为把i-1的每种分解加上一个1。如果i为偶数,如果有1,至少有两个,则f[i-2]的每一种情况加两个1,就得到i ;如果没有1,那么与i/2的分解方法数相同,构造方法为把分解式中的每一项除2。所以有:f[i]=f[i-2]+f[i/2]。一开始用递归式

2015-08-17 10:19:00 326

原创 poj 1990 树状数组(耳背的牛谈话)poj2231

题意:一群耳背的牛,每头牛有一个音量阈值xi。当两头牛i,j交流的时候,交流的最小声音为max{x[i],x[j]}*他们之间的距离。现在有n头牛,求他们之间两两交流最少要的音量和。思路:n的大小为20000显然不要n^2的算法。思路为首先按照阈值x对牛排序。那么新顺序下两头牛交流他们的max{x[i],x[j]}必为后面的牛的阈值,接下来就是快速求出当前牛和排在它前面所有牛的距离之和。需要用

2015-08-07 21:24:34 483

原创 poj 1989 数学(求一个序列的最短非子序列长)

题意:给定一个序列,求其最短非子序列的长度。分析:我们把序列划分为若干个区间,每个区间都包含(1~k)这些数字。我们使划分的区间尽量多,方法就是从左到右一旦满足了包含所有字符,则立即停止该区间,从下一位开始一个新的区间。答案就是划分的区间数+1。简单证明一下:对于一个有x个区间的序列,一定包含了所有长度为x的序列。因为,对于任意一个长度为x的序列,只需要依次在x个区间中取出其对应位的元

2015-08-07 20:24:42 1094

原创 poj 2391 最大流+floyd+二分(转移避难)

题意:无向图中给出n个点,m条边,每个点给定两个值a和b,a表示当前在该点的人数,b表示该点的人数限制。之后给定m条边以及边上的权值。问是否所有人都能通过转移找到避难处,如果能,输出最短的移动距离。思路:先用floyd求出任意两点之间的最短距离,然后二分答案。对每个二分值建立网络流进行求解(整个思路类似2112挤奶那道题)。建图时要拆点。对每个点x,拆成x'和x'',然后x'和x''之间有一条

2015-08-06 20:53:25 416

原创 poj 3592 强连通分量+最长路(spfa或者dp)(Instantaneous Transference)

题意:一辆坦克从N*M矩阵的左上角出发,每次往右或往下走一格,每格可以是'#'(表示不可以走),'*'表示传送门,或者是数字,表示在该格可以获得的值(只能取一次),传送门可以将到达该处的坦克传送到指定位置,你可以选择被传送或者走相邻的格,问坦克可以获得的值的和最大为多少。思路:N*M矩阵上每个点看成图中的一个点,能够走的连边。那么显然在一个强连通分量里的点的值是全部能够得到的。那么思路就是先求

2015-08-05 21:12:01 484

原创 poj 2187 旋转卡壳(平面上最远点对)

题意:给定二维平面上不超过50000个点,求最远点对距离的平方。思路:由数据量来判断直接枚举会超时。注意到最远距离点对必出现在这些点的凸包上,所以可以先求出凸包,然后在凸包上枚举。此法的最坏情况复杂度仍然是n^2的,但是可以AC这道题了。在复杂度意义下的优化是旋转卡壳(参考http://www.cppblog.com/staryjy/archive/2009/11/19/101412.html

2015-08-04 16:05:07 592

原创 poj 4052 AC自动机

题意:给定2500个模式串,和长度为5,100,000的母串,问母串中包含多少个模式串。如果模式串s1是模式串s2的子串,而且s2被母串包含,则s1应被忽略。思路:首先比较常规,对模式串建立AC自动机。然后用母串S在trie图上遍历,如果:1、走到未被忽略的终止节点x,则将x标记为已经匹配,并且忽略掉所有目前匹配串的所有子串。 2、走到危险但非终止的节点y, 则沿着y的前缀指针链找到第

2015-08-03 16:21:39 665

原创 poj 3370/2356 鸽巢原理

题意:给定一个数n和包含m个数的数组(保证n思路:根据鸽巢原理,必然能够找出这若干个数,而且是连续的若干个数。可以这样考虑,求出数组的前m项和数组,设为sum[1...m],对每个元素去mod n,那么sum数组的值必然在0...n-1之间。因为n#include #include #include #include #include #include using namesp

2015-08-01 19:58:19 350

空空如也

空空如也

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

TA关注的人

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