自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDU 4832 Chess (动态规划+组合数学)

关键点是行和列是独立的。 移动K步可以视为x方向移动i步(y向不动),y方向移动K-i步(x向不动)。分别预处理出x和y方向上移动i和K-i步时的种数,然后使用排列组合枚举i。相乘即可。 注意,计算组合数时可能使用了除法这将使模运算出错。 #include #include #include #include #include #include #include #include #incl

2015-10-31 16:15:36 356

原创 UVa 1400 "Ray, Pass me the dishes!"(区间最大连续数组和)

训练指南上的例题。 可以使用Splay解决,维护区间最大连续值即可,在维护输出要求这里比较复杂,需要考虑清楚,L最小和R最小。 注意要用longlong。 #include #include #include #include #include #include #define Value ch[ch[root][1]][0] using namespace std; typed

2015-10-31 13:34:12 380

原创 1500: [NOI2005]维修数列(Splay)

经典的题目,包含了Splay常见的操作:区间最值,区间求和,区间翻转,区间改值等。 #include #include #include #include #include #include #include #include #include #define Value ch[ch[root][1]][0] using namespace std; typedef l

2015-10-30 22:08:39 257

原创 HDU 1166 敌兵布阵(区间求和+单点更新)

经典问题,对序列进行区间求和和单点更新操作。可用树状数组或线段树或Splay实现。 我这里使用了Splay。 #include #include #include #include #include #include #include #include #include #define Value ch[ch[root][1]][0] using namespace std;

2015-10-30 20:05:56 254

原创 LeetCode273 Integer to English Words

将数字转化成英语单词。 分析单词可以发现每1000之间是有规律的。

2015-10-08 17:15:09 465

原创 POJ1655 Balancing Act (树的重心)

树的重心:如果删除某点以后,形成的所有子树中,最大的子树大小最小,那么该点是树的重心。 求树的重心只需要一遍dfs即可,并不是什么树形dp。对于某个点,需要求出它所有的子树大小,孩子结点直接递归计算就行了,它父亲方向的结点个数等于树结点总数减去所有孩子结点的和。然后比较在最大值中取最小的就可以了。 #include #include #include #include #include

2015-10-08 16:41:57 310

原创 LeetCode283 Move Zeroes

最容易想到的思路,先删掉所有的0,然后再在尾部补0。 class Solution { public: void moveZeroes(vector& nums) { int j=0; for(int i=0;i<nums.size();++i) if(nums[i]!=0) nums[j++]=nu

2015-10-08 13:30:18 311

原创 LeetCode284 Peeking Iterator

实现一个迭代器支持peek,next,hasnext。 其中next和hasnext直接使用继承来的操作即可;peek要求返回数值又不删除它,可以用一个临时变量的next实现。 // Below is the interface for Iterator, which is already defined for you. // **DO NOT** modify the interface

2015-10-08 13:09:07 218

原创 LeetCode290 Word Pattern

用两个哈希表分别存放字符-单词,单词-字符。然后遍历判断是否出现冲突。 切割字符串可用strtok。 class Solution { public: bool wordPattern(string pattern, string str) { char cstr[str.size()+1]; strcpy(cstr,str.c_str());

2015-10-08 12:25:48 249

原创 4034: [HAOI2015]T2 (树链剖分)

树链剖分+线段树区间更新和区间求和。 注意,一个子树的所有点上的序号在线段树上的位置是连续的,意识到这点这个题就是模版题了。 另外关于树链剖分的细节,第二次递归的时候要先计算重边对应结点否则会出错。 线段树中,push_down的部分注意可能溢出int。最终答案要用longlong。 #include #include #include #include #include #include

2015-10-08 12:06:59 251

原创 SPOJ 375. Query on a tree (基于边的树链剖分)

基于边的树链剖分,与点的几个不同点: 1,维护边权值,即是维护某点与其父亲点之间边的权值,所以可以等同视为该点的权值(即孩子结点,可以通过判断深度较大的是孩子结点)。 2,在LCA过程中,最后一步,在重链上求区间最大值,这里的左端点实际上是对应一条不在计算范围内的边,所以调整左端点x为son[x]。 #include #include #include #include #inclu

2015-10-07 23:25:47 298

原创 1036: [ZJOI2008]树的统计Count (基于点的树链剖分)

处理点的树链剖分。支持单点更新,树上求最值和树上求和。 注意的地方: 记录树上的点在线段树的位置的同时,也要记录线段树的某个位置是树上哪个点。因为线段树建树的时候是按照线性从左往右的,需要知道每个位置的点是哪个。

2015-10-07 16:49:25 332

原创 USACO Section 2.4 The Tamworth Two (BFS模拟)

用三维数组保存运动物体第一次处于x、y坐标和某方向时所用步数,同时记录当运动物体的路径和出现循环时的周期。这一步用BFS完成。 枚举两个运动物体路径中的公共位置,根据情况分类讨论。 有3种情况。 1,人和牛都处于循环路径中。即判断A+xa=B+y+b,用拓展欧几里德求解。 2,人和牛都不在循环路径中。即判断A=B。 3,人和牛只有一个在循环路径中。即判断A+xa=B。 /* ID: k

2015-10-06 17:44:11 346

原创 USACO Section 2.3 Controlling Companies (迭代更新)

每次循环迭代,直到没有更新控制的公司。

2015-10-06 15:29:20 230

原创 USACO Section 1.3 wormhole (暴力+模拟)

注意几个地方。 1,暴力的时候要注意别算重复了。匹配是双向的。 2,判断回路不能使用拓扑排序或弗洛伊德,因为它的行动是有规则的:传送以后只能往前走不能再相同位置传回去,基于这个条件只能枚举每个位置模拟判环。

2015-10-06 12:40:38 700

空空如也

空空如也

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

TA关注的人

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