- 博客(14)
- 资源 (6)
- 收藏
- 关注
原创 hdu2438 Turn the corner 三分
思路:显然为了让车子能顺利通过弯道,我们应该使车子擦着左边那个墙角走,在转弯的过程中,车子的右下端(点p)露在最外面,所以我们只需判断点p能否顺利通过就行。下面就是数学知识了,我们可以建立p的横坐标关于θ的函数,这个画个图可以算出来,现在给出其函数表达式:f(θ)=l*cos(θ)-(x*cos(θ)-d)/sin(θ).f(θ)在区间(0,π/2)上先增后减,所以我们需要求出f(θ)的最大值,若
2013-01-19 10:36:14 1489 1
原创 hdu2298 Toxophily 三分+二分
首先这题是一道物理题,需要我们根据题意抽象一个函数出来。对物体的运动作分解后,可以得到:f(t)=x*tan(t)-g*x*x/(v*cos(t))^2/2,其中t表示v与x轴正向的夹角(弧度),f(t)表示物体的运动轨迹与直线x0=x的交点纵坐标。分析后可以得到该函数在区间(0,π/2)上先增后减,所以我们可以在该区间上三分,求出使函数取得极大值的角度t0。若f(t0)#includ
2013-01-19 01:38:07 1262
原创 hdu1969 Pie 二分
这道题刚开始没想到要用枚举,一直以为是贪心。后来经指纹兄提醒,才恍然大悟,看来做题还是不够啊。。思路:对所有可能的情况二分,但此处有个地方需要注意(调了半天才被我发现的),因为蛋糕能分成的份数是一个整数,所以在二分查找中不能通过判等直接退出循环。即使当前得到了满足题意的蛋糕数,也要尝试让蛋糕的面积继续增大,直到不满足循环条件为止。#include#include#includeus
2013-01-18 21:37:53 1046
原创 hdu2899 二分枚举
这题首先要求出原函数的导函数,注意x,y的范围后,发现在导数为0的地方原函数取得最小值。所以本题要解决的就是求出导数为0的那个点。#include#include#includeusing namespace std;const double eps=1e-9;double f(double x,double y)//原函数的导函数{ double X[7]={1};
2013-01-18 15:39:36 877
原创 hdu2199 二分枚举
这题注意精度就行,其时就是一个简单的二分枚举。#include#include#includeusing namespace std;const double eps=1e-4;double f(double x){ double X[4]={x}; for(int i=1;i<4;i++) X[i]=x*X[i-1]; return 8
2013-01-18 15:08:22 964
原创 hdu3466 Proud Merchants 变形的0-1背包
这道题看了解题报告后才懂的,第一次遇到这种变形的背包,不过真是很难想到要先按照Q-P排序。。。下面说一下我对本题的理解。 首先讲一下暴力解决,很显然我们可以用枚举的方法,对每个物品都有选与不选两种决策。但即使暴力也存在一个问题,比如对 3 5 6,5 10 5这两个物品,如果我们的决策是两个都不选或者是只选其中一个,显然没什么问题,但如果我们要是两个都选的话,按照之前这个顺序有m>
2013-01-18 14:03:13 934
原创 约瑟夫问题
问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。我们知道第一个人(编号一定是(m-1) mod n) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m mod n的人开始):k k+1 k+2 ... n-2,n-1,0,1,2,... k-2并且从k开始报0。现在我们把他们的编号做一下转换:
2013-01-14 22:15:44 664
原创 hdu1823 Luck and Love 二维线段树
首先发表下做完后的感受:这题真他妈操蛋!!!一个简单的二维线段树,搞了一下午啊啊。。思路:首先根据身高建一棵线段树,然后在每个节点上再以活泼度建一棵线段树,并记录每个区间的最大缘分值。重点说细节了:在查询时可能会有A1>A2,H1>H2;然后就是插入数据时可能会有缘分值为0的数据,所以初始化时不要初始化为0;可能会插入身高和活泼度相同但缘分值不同的数据,因此还需要比较一下;最后一点,我写(
2013-01-03 18:52:23 1179 1
原创 Lost Cows poj2182 线段树
本题若按正序思考,则没什么头绪,但如果我们倒着看会发现,从后向前每一个数字可以找出一头牛。另外定位一头牛的编号后,为了确定下一头牛,我们需要删除这头牛的编号,即需要区间动态查询,所以可以选择线段树。思路:可以用每个节点记录该区间中母牛的数目,然后在这棵树中,已知一个节点前面比它小的节点数,我们就可以同过线段树二分快速查找了。 #include #include#include
2013-01-02 19:12:36 875
原创 City Horizon poj3277 线段树+离散化
这道题做得真心不容易,首先是离散化纠结了许久,然后就是线段树竟然还会写得有漏洞,最后就是数据范围了,这题的数据超强的啊,最后结果要用__int64,但我还是忽略了中间计算过程也会超范围,最后各种无语。。。然后说下这题的思路吧,由于坐标的变化范围很大,而城市最多只有40000个(其实是400000个,奉献了几个re),所以很容易想到用离散化。离散化后接下来就是插入线段了,计算面积时当然就要知道这
2013-01-02 15:57:32 967
原创 poj1195 Mobile phones 二维树状数组
做得有点苦逼,各种错误,但最后还是被我发现了#include #include#includeusing namespace std;int c[1025][1025],n;inline int lowbit(int k){ return k&(-k);}void insert(int x,int y,int d){ for(int i=x;i<=n;i
2013-01-02 15:16:31 561
原创 poj3067 Japan 树状数组&逆序对
理解题意候会发现这就是一道求逆序对的题目。以a为第一关键字,b为第二关键字按照升序对原始输入数据进行排序,然后对每个b,检查前面比它大的有几个。 #include #include#include#includeusing namespace std;struct way{ int a,b; bool operator<(const struct way t)
2013-01-01 23:09:20 809
转载 树状数组
当要频繁的对数组元素进行修改,同时又要频繁的查询数组内任一区间元素之和的时候,可以考虑使用树状数组. 通常对一维数组最直接的算法可以在O(1)时间内完成一次修改,但是需要O(n)时间来进行一次查询.而树状数组的修改和查询均可在O(log(n))的时间内完成. 一、回顾一维树状数组假设一维数组为A[i](i=1,2,...n),则与它对应的树状数组C[i](i=1,2,
2013-01-01 22:19:31 696
原创 poj1182食物链 并查集
这题与hdu1829做法类似,在一棵树中,用0表示该节点与根节点相同,1表示该节点被根节点吃,-1表示该节点吃根节点。#include#includeusing namespace std;const int maxn=50005;int set[maxn],c[maxn];//set记录父亲节点,c记录当前节点与根节点的关系//0 :同类 1:被根节点吃 -1:吃根节点vo
2013-01-01 15:23:16 731
VC++2010下使用Tesseract需添加的dll
2014-01-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人