自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hotwolf---Forest

无论多没有胜算的游戏,既然已经开始,就理应全力以赴!

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

原创 poj 1379 Run Away

题意就是寻找最安全的点,也就是找到一点使得他在题目给的区域之内与所有点最短距离最大,很容易想到这题可以用不断趋近的模拟退火来做,先随机一部分点集,对每个点分别点的扩展,选取较优点来替代原来的点,然后不断缩小步长,点的扩展时试了几种方法,发现还是使用正余弦比较靠谱。 #include #include #include #include #include #include using namesp

2013-02-27 15:28:41 705 2

原创 poj 3449 Geometric Shapes

这是一道没有多少人做的水题,主要题目的要求比较多,对输入和输出的要求高,只要处理好输入输出,然后对每个多边形的每条边分别进行判断就能做出来了。 #include #include #include #include using namespace std; int ch[26]; struct point{ double x,y; }; point polygon[26][22]; doubl

2013-02-25 18:20:10 270

原创 Project Euler Problem 47

这道题是完全暴力做的,跑了几十秒: #include bool dis(int nn) { int i,top=0; for(i=2;i<=nn;i++) { if(nn%i==0) { top++; nn/=i; } while(nn%i==0) nn/=i; } if(top==4) //有四个质因数才行 return true; ret

2012-08-19 22:11:40 247

原创 Project Euler Problem 50

这是简单题,直接枚举每个起始的质数,然后连续质数相加,记录下能得到的最大的质数的项数,然后找到最大项数即可。 #include bool isPrime(int n) //判断质数 { int i; for(i=2;i*i<=n;i++) if(n%i==0) return false; return true; } int main() { int xx,num,sum=

2012-08-19 17:02:20 433

原创 POJ 1835 宇航员

题意是一个可以在三维空间任意行走的宇航员,告诉你他每次行走的方向,让求最后到达的地点和面对的方向。这题看上去比较简单,但仔细想想,其实就算是朝一个方向走也有4种不同的方式,所以很容易想到不仅记录前进的方向还要记录头所朝的方向,然后根据转弯判断之后的方向。 #include #include char tmp[20]; void next(int flag,int dir[],int head[]

2012-07-22 20:16:09 325

原创 POJ 1113 Wall

最基础的凸包题,可以用来测模板。 凸包就是给定一些点,求包括这些点的边长最小的多边形,常用的有graham算法和melkman算法。 graham算法是先按y坐标再按x坐标排序,由凸包的性质可以发现最下面最左边的点一定是凸包上的点,然后按顺序扫 直到有一个点不满足与当前栈顶两点的左旋性质,然后退栈,直到他满足左旋或者堆栈里面还有一个元素,将它加入堆 栈,先从前往后遍历,再从后往前遍历,这样

2012-07-22 19:43:14 256

原创 POJ 1696 Space Ant

简单题,题意就是从y坐标最低的点出发,每次只能向左转,并且不能与之前走过的路相交,问最多能经过多少个点。 这其实就是一个对每个点,找求最小极角的问题首先判断当前的角与堆栈顶部的两个角的夹角是否成左旋,然后找与当前栈顶的点构成的直线角度最小的点入栈,然后重复上面的步骤,直到没有满足条件的点为止。代码如下: #include #include #include #include using na

2012-07-22 16:54:20 314

原创 POJ 1434 Fill the Cisterns

简单的二分,先判断给的水是否超过所有的盒子的容量,然后对最高的盒子的上界和最低的盒子的下界进行二分,直到h-l满足给定的条件跳出,只需要再加一个中间状态算总的水的体积的函数即可,代码如下: include double eps=0.000001; int v,hmax,hmin; int n; struct box{ int b,h,w,d; }c[51000]; double vol(dou

2012-07-22 15:38:45 351

原创 POJ 1410 Intersection

思路:先判断是否在矩形内部,再判断线段是否能和矩形的某条边相交,若满足其中一个条件则为真,否则为假。 discuss中有人说给的点不是按左上和右下的顺序,如果对每条边都判断的话就不用考虑左上角或者右下角了,代码如下: #include #include using namespace std; struct Point{ int x,y; }; int Mul(Point p1,Point

2012-07-22 15:18:47 216

原创 POJ 2194 2850 Stacking Cylinders

很简单,直接用高中的解析几何知识,将两个与两个圆都想切的圆的圆心求出来就可以了,在加个两重循环找到最上面的点。 #include #include #include using namespace std; double num[20][20], numy[20][20]; int n; void getpoint( double x1, double y1, double x2, do

2012-07-22 14:52:48 701

原创 POJ 2653 Pick-up sticks

简单的判断线段相交问题,用滚动数组记录最上面的线段,如果与当前的线段相交则抛弃,否则加入滚动数组。 #include #include using namespace std; double eps=1e-6; int n; struct Point{ double x,y; }; struct Line{ Point s,e; }; int que[2][100005]; int top[

2012-07-22 14:25:02 245

原创 POJ 4011 Automated Telephone Exchange

很无聊的题目……第401道水题。 #include int main() { int n,i; while(scanf("%d",&n)!=EOF) { int cnt=0; for(i=0;i<100;i++)//直接判断范围 if(n-i>=0 && n-i<100) cnt++; printf("%d\n",cnt); } return 0; }

2012-07-22 13:26:03 437

原创 POJ 3727 Newton’s Method

这道题是我的第400道题,并不难,就是考虑的时候稍微有点繁琐,想想自己做的那400道题,几乎都是水题,很多都是在discuss的提醒下AC的,并没有什么技术含量,很多的时候都是为了刷足题数而做的,自己想的很少,收获的也很少,除了看到题目能初步地判断是什么类型的题之外几乎没有什么提高,一直在浑浑噩噩的刷题却没有去考虑一些本质性的东西。 额,扯远了,这道题就是在将字符串转化为多项式每一项的系数和指数

2012-07-22 13:07:21 719

原创 POJ 3304 Segments

题目大意是给一些线段,判断是否存在一条直线使得这条直线与所有的线段都有交点。             对于这个题我有两个思路,第一是从无穷远处引一条射线,通过不断地旋转这条射线也就是枚举所有的线段的两个端点,让他们构成一条直线,然后看这条直线能否和所有的点相交。(没有去做,也不知道是否正确)             另一个思路就是从所有的点中每次枚举两个不相同的点,看他们构成的直线能否与所有的

2012-07-21 22:14:22 317

原创 POJ 1269 Intersecting Lines

非常基础的判断直线关系题,用最直观的方式:写出直线的一般式,然后根据高中的解析几何判断两条直线是否相交,相同和平行。 #include double eps=1e-6; double abs(double a) { if(a<0) return -a; return a; } struct Point{ double x,y; }; struct line{ double a,b,c

2012-07-21 21:44:05 215

原创 POJ 1106 Transmitters

这是道计算几何的简单题,只要以每一个与圆心距离小于等于圆半径的点和圆心构成半圆的直径线,然后找在直径右侧且距圆心距离小于等于圆的半径的点的个数,记录最大值就行了。 #include #include double eps=1e-8; double abs(double a) //绝对值 { if(a<0) return -a; return a; } struct Point{

2012-07-21 20:55:25 276

原创 Poj 1265 Area

和POJ 1654类似,利用格点的性质和给的点的连续性即可。 多边形的面积:首先多边形不确定凹凸,其次多边形的点很多,所以这道题就不能用我们平常的想法去根据点计算多边形的面积。通过观察可以发现这道题有一个比较好的地方,那就是多边形的边已经按次序给出,并且保证没有任何相邻的两点和别的边构成相交的情况,而且最终一定会走回原点构成多边形,所以可以根据叉积的性质去求。|a×b|=|a|*|b|*sinθ

2012-07-21 20:13:31 325

原创 Poj 2074 Line of Sight

这题确实是道水题,第一,思路并不难想,就是根据房子的右端点和障碍物的左端点判断最左边能看到房子全貌的点,再根据房子的左端点和障碍物的右端点判断最右边能看到房子全貌的点,把这些点记录下来再扫描判重,根据每一个右端点,找到一个在他右边离他最近的左端点与他的距离,如果有线段覆盖这个右端点,那么该右端点就不能在某个可视区域里面,长度为零(记得将线段的左右端点加入数组中判断!) 要注意障碍物不在两条线段之

2012-07-21 17:35:11 585

原创 Poj 4001 Hdu 4121 Xiangqi

这题是道模拟题,题意很简单,现在黑棋只有一个“将”,红棋可能有“帅”,“车”,“炮”,“马”,走棋方式和我们平常下棋一样,现在是黑棋走,问黑棋是否能走到安全的位置上去,解题思路就是判断黑棋能走的四个方向是否安全,对车,炮,马分别判断,代码如下: #include int dir[4][2]={0,1,1,0,0,-1,-1,0}; //四个方向 int dir2[8][2]={1,2,2,

2012-07-19 23:32:13 404

原创 Project Euler Problem 36

我是用了纯暴力枚举,枚举每个十进制回文数,并进行判断是否满足二进制回文,若满足则记录,方法很简单,代码如下: #include int bin[20]; int sum; bool ispalindromic(int pali) //判断一个数是否在2进制数上循环 { int j,n=pali; if(pali==0) return false; int top=0; while

2012-07-19 22:56:52 492

原创 POJ 1654 Area

这是一道非常好的计算多边形面积的题目,首先多边形不确定凹凸,其次多边形的点很多,所以这道题就不能用我们平常的想法去根据点计算多边形的面积。通过观察可以发现这道题有一个比较好的地方,那就是多边形的边已经按次序给出,并且保证没有任何相邻的两点和别的边构成相交的情况,而且最终一定会走回原点构成多边形,所以可以根据叉积的性质去求。         |a×b|=|a|*|b|*sinθ,将叉积除以2正

2012-07-19 22:33:31 249

空空如也

空空如也

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

TA关注的人

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