文章分类 -  模板

凸包--模板
摘要:题目:Surround the Trees在创建凸包前要对输入的数据进行一定的处理。首先需要找到所有点左下角的点将它放在数组p[0]的位置。(swap这个函数在c++的标准库中是有的)左下角这个点一定在凸包上。View Code Point tmp; int pos=0; tmp.x=p[0].x; tmp.y=p[0].y; for (i=1; i<n; i++) //寻找左下角的点 { if (p[i].y<tmp.y) { tmp.x=p[i].x; tmp.y=p[i].y; pos=i; } if (p[i].y==tmp.y && p[i].x<t 阅读全文
posted @ 2011-05-01 16:07 tzc_yujunyong 阅读(445) 评论(0) 推荐(0)
母函数--模板(未完成)
摘要:学习题目:Holding Bin-Laden Captive!,塔神的钱包先写一下自己的母函数模板:以货币问题为例:sum表示货币的钟数,数组n表示每种货币的个数,数组v表示每种货币的面值。在调用这个函数前必须令c1,c2中元素的值为0;View Code const int MAXN=10005;int c1[MAXN], c2[MAXN]; //c1存放目前所有函数的乘积, c2存放两个函数的临时乘积int maxn;void genfun(int sum, int *n, int *v){ int i, j, cnt=0; maxn=n[0]*v[0]; //存放当前x的最大次数,相当于 阅读全文
posted @ 2011-04-25 16:27 tzc_yujunyong 阅读(173) 评论(0) 推荐(0)
计算几何中常用的函数--模板
摘要:在这里写出计算几何中经常会用到的函数,在对于专题进行讲解的文章中,没有特别说明的函数都在这里。定义点的结构体:struct Point{ double x, y;};定义精确度:const double eps=1e-6;int dblcmp(double d) //精确度{ if (fabs(d)<eps) { return 0; } return d>0 ? 1 : -1;}点乘和叉乘:double xmult(Point p0, Point p1, Point p2) //叉乘{ return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y 阅读全文
posted @ 2011-04-24 22:43 tzc_yujunyong 阅读(399) 评论(0) 推荐(0)
判断线段相交--模板
摘要:计算几何的常用的函数题目:Area,规范相交:两条线段恰有一个不是端点的公共点。即如果一条线段的一个端点恰在另一条线段上则不视为相交;如果两条线段部分重合,也不视为相交。非规范相交:两条线段存在公共部分。(上述两种情况都可视为非规范相交)其中a~f是非规范相交; g,h是不相交; a~c有唯一的交点;d~f有无数个交点。判断线段是否相交,如果是规范相交则求出交点坐标p并返回1,如果是非规范相交则直接返回2,否则返回0;代码:View Code int segcross(Point a, Point b, Point c, Point d, Point &p) //判断线段相交{ dou 阅读全文
posted @ 2011-04-24 22:32 tzc_yujunyong 阅读(1185) 评论(0) 推荐(0)
kmp算法模板
摘要:学习题目:Nikhil's Password求next数组的算法:代码1:该代码存在重复计算,样例:aaaaaaad,aaad。View Code void get_next(const string sub, int *next){ int len=sub.length(); int i,k; next[0]=k=-1; for (i=0; i<len;) { if (k==-1 || sub[i]==sub[k]) { next[++i]=++k; } else k=next[k]; }}代码2:优化了代码1中重复计算的问题。View Code void get_next(c 阅读全文
posted @ 2011-04-07 13:25 tzc_yujunyong 阅读(439) 评论(0) 推荐(0)