09 2015 档案

摘要:对于很大的组合数不能用C(n, m) = C(n - 1, m) + C(n-1, m -1)来求,这里就用到Lucas定理。模板题: hdu3037:模板如下:#include using namespace std;const int maxn = 100010;typedef long lon... 阅读全文
posted @ 2015-09-24 17:51 Howe_Young 阅读(287) 评论(0) 推荐(0)
摘要:盗张图:来自http://blog.csdn.net/xuechelingxiao/article/details/39494433题目大意:有一排建筑物坐落在一条直线上,每个建筑物都有一定的高度,给出一个X坐标,高度为0,问X位置能看到的视角是多少度。如图:图一:图二:图一为样例一,图二为样例三,... 阅读全文
posted @ 2015-09-24 16:19 Howe_Young 阅读(303) 评论(0) 推荐(0)
摘要:题意比较难懂,一只青蛙过河,它最多一次跳L米,现在河中有石头,距离不等,上帝可以往里加石头,青蛙非常聪明,它一定会选择跳的次数最少的路径。问怎么添加石头能让青蛙最多的次数。输出青蛙跳的最多的次数。考虑对于长度L+1,上帝一定会让青蛙跳两次。那么只需要尽可能的构造L+1就行了。那么就需要求多少个L+1... 阅读全文
posted @ 2015-09-24 11:05 Howe_Young 阅读(358) 评论(0) 推荐(0)
摘要:题意比较啰嗦。就是搜索加上一些特殊的条件,比如可以在原地不动,也就是在原地呆一秒,如果有监控也可以花3秒的时间走过去。这种类型的题目还是比较常见的。以下代码b[i][j][x]表示格子i行j列在x时刻有监控照的到。因为只有4个方向,所以只需要时间对4取模就行。具体细节见代码。#include #in... 阅读全文
posted @ 2015-09-23 22:01 Howe_Young 阅读(448) 评论(0) 推荐(0)
摘要:题意:给定两个圆环,求两个圆环相交的面积。思路:由于圆心和半径不一样,分了好多种情况,后来发现只要把两个圆相交的函数写好之后就不需要那么复杂了。两个圆相交的面积的模板如下:double area_of_overlap(point c1, double r1, point c2, double r2)... 阅读全文
posted @ 2015-09-23 19:41 Howe_Young 阅读(337) 评论(0) 推荐(0)
摘要:题意:给定n个狼的战斗力,并且每个狼的战斗力还需要加上相邻的两个狼的额外的攻击力。当把这个狼杀死之后,它的额外的战斗力就不会给其它相邻的狼加了。每杀死一个狼,它就受到和狼攻击一样大的伤害。求杀死所有的狼最小受的伤害。思路:区间dp,dp[i][j]表示从i到j最小的伤害,考虑[i, j]当中的第k个... 阅读全文
posted @ 2015-09-22 22:07 Howe_Young 阅读(297) 评论(0) 推荐(0)
摘要:题意:给定n个数,从中分别取出0个,1个,2个...n个,并把他们异或起来,求大于m个总的取法。思路:dp,背包思想,考虑第i个数,取或者不取,dp[i][j]表示在第i个数时,异或值为j的所有取法。dp[i][j] = dp[i - 1][j] + dp[i - 1][j ^ a[i]]);其中d... 阅读全文
posted @ 2015-09-22 22:00 Howe_Young 阅读(255) 评论(0) 推荐(0)
摘要:转载至http://www.renfei.org/blog/introduction-to-cpp-string.html运算符重载+ 和 +=:连接字符串=:字符串赋值>、>=、>:输出、输入字符串注意:使用重载的运算符 + 时,必须保证前两个操作数至少有一个为 string 类型。例如,下面的写... 阅读全文
posted @ 2015-09-20 20:07 Howe_Young 阅读(271) 评论(0) 推荐(0)
摘要:题意:求【1,n】当中包含49的一共有多少个数字?思路:用dp[i][0]来表示 数字位数小于等于i并且不包含49的数字个数,之所以说小于等于而不是严格等于因为有可能有前导零。dp[i][1]表示 数字位数等于i 并且开头为9,不含“49” 的个数。dp[i][2] 表示数字位数小于等于i并且包含“... 阅读全文
posted @ 2015-09-15 20:44 Howe_Young 阅读(207) 评论(0) 推荐(0)
摘要:题意:给定一个区间[n, m],求这个区间当中不含62和4的个数。例如62315,88914就是不符合条件的。数位dp第一题,dp[i][j]表示以 j 开头的 i 位数满足条件的个数,先要预处理出来所有的情况,下面是预处理的核心。其中k表示j后面的那一位。max_len是题目中给的n的最大位数,这... 阅读全文
posted @ 2015-09-14 21:07 Howe_Young 阅读(229) 评论(0) 推荐(0)
摘要:让求 f(x)=|a∗x3+b∗x2+c∗x+d|(L≤x≤R)的最大值这个题目讨论a和b的值,如果a==0的话,那么这个方程就变成了一个一元二次方程,直接找端点和对称轴(如果对称轴在给定的区间内)处的函数值就行,如果a != 0,那么求导,求导之后判断二次方程的delta,如果delta小于等于0... 阅读全文
posted @ 2015-09-14 20:47 Howe_Young 阅读(335) 评论(0) 推荐(0)
摘要:DescriptionLittle Petya likes points a lot. Recently his mom has presented himnpoints lying on the lineOX. Now Petya is wondering in how many ways he ... 阅读全文
posted @ 2015-09-11 10:39 Howe_Young 阅读(597) 评论(0) 推荐(0)
摘要:这道题为裸的RMQ。具体RMQ的意思为区间最值查询,他是先预处理出来每一段的最值,然后查询的时候直接O(1)的复杂度得出结果。其实还是个dp。用Rmin[i][j]表示从i开始长度为2^j这个区间的最值。至于为什么是2^j,因为计算机当中是二进制,移位比较方便。查询的时候也是将一个区间分成两部分,其... 阅读全文
posted @ 2015-09-09 19:20 Howe_Young 阅读(203) 评论(0) 推荐(0)
摘要:题目大意:对一棵树,求出从每个结点出发能到走的最长距离(每个结点最多只能经过一次),将这些距离按排成一个数组得到dis[1],dis[2],dis[3]……dis[n] ,在数列的dis中求一个最长的区间,使得区间中的最大值与最小值的差不超过m。思路:先找出树的直径的两个端点来,那么树当中的其它节点... 阅读全文
posted @ 2015-09-05 15:16 Howe_Young 阅读(250) 评论(0) 推荐(0)
摘要:题目大意:给定一棵树,让求出依次访问k个点的最小花费,每条边的权值都为1.思路:如果能一直往下走不回来,那么这个路径肯定是最小的,这就取决于给定的k,但是怎么确定这个能一直走的长度呢,其实这个就是树的直径,也叫作最长简单路径。找出来这个直径之后,只需和k比较一下就能确定走多少步。设直径为maxx,如... 阅读全文
posted @ 2015-09-02 19:08 Howe_Young 阅读(163) 评论(0) 推荐(0)
摘要:树的直径:树上的最长简单路径。求解的方法是bfs或者dfs。先找任意一点,bfs或者dfs找出离他最远的那个点,那么这个点一定是该树直径的一个端点,记录下该端点,继续bfs或者dfs出来离他最远的一个点,那么这两个点就是他的直径的短点,距离就是路径长度。具体证明见http://www.cnblogs... 阅读全文
posted @ 2015-09-02 16:08 Howe_Young 阅读(300) 评论(0) 推荐(0)
摘要:树的重心的定义是:一个点的所有子树中节点数最大的子树节点数最小。这句话可能说起来比较绕,但是其实想想他的字面意思也就是找到最平衡的那个点。POJ 1655 题目大意:直接给你一棵树,让你求树的重心,如果有多个,找出编号最小的那个,并输出他的子树当中最大的节点数。思路:利用dfs求出每个点的所有孩子数... 阅读全文
posted @ 2015-09-02 11:23 Howe_Young 阅读(331) 评论(0) 推荐(0)
摘要:去网上搜题解大多数都是说论文,搜了论文看了看,写的确实挺好,直接复制过来。不过代码中有些细节还是要注意的,参考这篇http://blog.sina.com.cn/s/blog_6d5aa19a0100o73m.html一段设X为满足ii,那么i对答案的贡献为B[i]-i。显然,随着i的增大,B[i]... 阅读全文
posted @ 2015-09-01 20:50 Howe_Young 阅读(445) 评论(0) 推荐(0)