自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDU 2133

#includeusing namespace std;int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};char name[8][20]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};int Dateweek(int year,int

2013-12-27 15:50:23 496

原创 拓扑排序

HDU3342#include#include#include#include#include#includeusing namespace std;int N,M;vector G[105];int Count[105];int ans[105],pos;int first[105];void TopoSort(){ queue q;

2013-12-19 17:33:39 476

转载 C语言平面几何19-三角形的重心和垂心

三角形的重心:三角形三条中线的交点。该交点到顶点的距离是到对边中点距离的2倍。三角形的垂心:三角形三条高的交点。/* 三角形的重心 */Point BaryCenter(Triangle t){ // 三条中线的交点 Point m = MiddlePoint(t.B, t.C); Line l1 = LineMake(t.A, m); Point n = MiddlePo

2013-12-17 17:30:47 1051

转载 C语言平面几何18-三角形的内心和内切圆

三角形的内心,就是其内切圆的圆心。三角形三内角平分线相交于一点,该点即为内心。/* 三角形的内心 */Point Incenter(Triangle t){ Line l1 = AngleBisector(t.A, t.B, t.C); Line l2 = AngleBisector(t.B, t.A, t.C); int flag; return LinesIntersectio

2013-12-17 17:29:44 1010

转载 C语言平面几何17-角平分线

角平分线的求解思路,如图,求∠ABC的角平分线:(1)在BC(或BC的延长线)上取一点D,使|AB|=|BD|。(2)求线段AD的中点E,则直线BE即为∠ABC的角平分线。点D的坐标可以根据三角形相似来求解,如x满足|BD|/|BC|=(D.x-B.x)/(C.x-B.x)。/* 角平分线,输入:角ABC<180度 */Line AngleBisector(Point A,

2013-12-17 17:29:06 833

转载 C语言平面几何16-三角形的外心和外接圆

三角形的外心,就是其外接圆的圆心。三角形三边的垂直平分线相交于一点,该点即为外心。/* 三角形的外心 */Point Excenter(Triangle t){ Line l1 = PerpendicularBisector(t.A, t.B); Line l2 = PerpendicularBisector(t.A, t.C); int flag; return LinesInt

2013-12-17 17:28:22 828

转载 C语言平面几何15-线段的垂直平分线

线段AB的垂直平分线:先求中点M,再根据线段AB的斜率k1求出直线的斜率k2,k1*k2=-1,最后求出线段的方程:kx-y+C=0。/* 线段的垂直平分线 */Line PerpendicularBisector(Point A, Point B){ Point m; // 中点 m.x = (A.x + B.x)/2; m.y = (A.y + B.y)/2; Line

2013-12-17 17:27:45 1146

转载 C语言平面几何14-三角形的面积

求三角形ABC的面积S。1)S=底*高/22)S2=p*(p-a)*(p-b)*(p-c),其中p=(a+b+c)/2C语言代码:/* 三角形的面积: 底*高/2 */double AreaOfTriangle(Triangle t){ Line l = LineMake(t.A, t.B); double d = DistanceOfPoints(t.A, t.B);

2013-12-17 17:26:20 663

转载 C语言平面几何13-两直线的夹角

平面几何中,两直线的夹角定义为两条直线所形成的不大于90度的角。两直线夹角θ:tgθ=|(k2-k1)/(1+k1*k2)|,k1、k2分别为两直线的斜率直线A1x+B1y+C1=0和A2y+B2y+C2=0的夹角θ:tgθ=|(A1B2-A2B1)/(A1A2+B1B2)|。C语言代码:/* 两直线的夹角,返回角度值,非弧度值 */double IncludedAngl

2013-12-17 17:25:35 1938

转载 C语言平面几何12-向量方法判断线段与矩形是否有交集

向量方法判断线段与矩形是否有交集,通过向量叉乘的结果正负来判断,当矩形在线段的某一侧时,叉乘的结果要么全正,要么全负,此时无交集。判断有2步:1)快速排斥,2)叉乘。int RSIntersection(Rectangle r, Point A, Point B){ MBR m1 = (MBR)r; MBR m2 = MbrConstruct(A, B); // 快速排斥 if

2013-12-17 17:24:54 827

转载 C语言平面几何11-点关于直线的对称点

求点P(x0, y0)关于直线Ax+Bx+C=0的对称点M(x1, y1),满足两个条件:(1)线段PM的中点在直线上(2)PM与直线垂直/* 点关于直线的对称点 */Point SymmetricalPoint(Point p, Line l){ Point s; double tmp = l.A * l.A + l.B * l.B; s.x = (l.B *l.B*p

2013-12-17 17:23:55 899

转载 C语言平面几何10-点到直线的垂点

求点A(x0, y0)到直线Ax+By+C=0的垂点B(x1, y1),满足两个条件:(1)Ax1+By1+C=0,点B在直线上(2)(y1-y0)/(x1-x0) * A/B=1,两线垂直,斜率k1 * k2 = -1。注:判断两直线垂直的方法有(1)A1A2+B1B2=0,(2)k1*k2 = -1。/* 计算点到直线的垂点 */Point VerticalPoint(P

2013-12-17 17:23:12 781

转载 C语言平面几何9-两直线的交点

求平面中两直线的交点,当两直线不平行时,必定只有一个交点。/* 返回两直线的交点 */Point LinesIntersection(Line m, Line n, int *flag){ double d = n.A * m.B - m.A * n.B; if (d == 0) { *flag = 0; return; } Point i; i.x = (n.B *

2013-12-17 17:21:40 933

转载 C语言平面几何8-两直线的位置关系

平面中,两直线不相交就平行,相交中又分垂直相交和非垂直相交,两直线重合可认为是特殊的平行。C语言代码如下:/* 两直线的关系 * 平面中,两直线不相交就平行 */int TwoLines(Line m, Line n){ // 平行:A1/B1 = A2/B2 if (m.A * n.B == m.B * n.A) { // 两直线斜率相同 if (m.C * n.B

2013-12-17 17:20:49 729

转载 C语言平面几何7-直线与圆的位置关系

直线与圆的位置关系有3种:1,相离,有0个交点2,相切,只有1个交点3,相交,有2个交点C语言代码如下:// 直线与圆的位置关系:0-相离,1-相切,2-相交int LineAndCircle(Line l, Circle c){ double d = DistanceOfPointToLine(c.centre, l); double r = c.radius; i

2013-12-17 17:19:43 1323

转载 C语言平面几何6-判断线段是否与矩形范围有交集

判断线段AB是否与矩形范围有交集这里的矩形指的是边与坐标轴平行的矩形,可用x和y上最大最小值表示。判断是否相交,先快速排斥,再做跨立,通过向量的叉积判断矩形的四个顶点是否在线段的两侧,是说明有交集。(如果判断与矩形的边是否有交集的话,可判断线段是否与矩形的每条边是否有交集,线段与线段的交集判断。) 这里在介绍另外一种方法,降维的方法:例如,有线段AB和矩形MN,如图所示:

2013-12-17 17:18:52 725

转载 C语言平面几何5-两点确定一条直线

/* 两个不同点A,B确定一条直线,AB相同返回的值全0 * 直线方程:Ax+By+c=0 * A = y2 - y1; * B = x1 - x2; * C = -A*x1 - B*y1 = x2*y1 - x1*y2; */Line LineMake(Point A, Point B){ Line l; l.A = B.y - A.y; l.B = A.x - B.

2013-12-17 17:17:26 1848

转载 C语言平面几何4-两线段是否相交

判断两线段是否相交:方法(1):快速排斥(两个MBR是否有交集)+跨立(一个线段的两个端点在另一线段的两端)。给出C语言代码如下:/* * 由两个点构造一个向量 */Vector VectorConstruct(Point A, Point B){ Vector v; v.x = B.x - A.x; v.y = B.y - A.y; return v;}//

2013-12-17 17:15:15 864

转载 C语言平面几何3-点是否在线段上

判断点P是否在线段AB上方法很多,这里给出两种。(1)通过距离判断,点P在线段AB上|AP|+|PB|=|AB|(2)通过向量叉积判断,点在线段上向量AP×向量AB=0,并且点P坐标在AB坐标之间C语言代码如下:/* 点是否在线段上: 距离判断 */int PointIsOnSegment(Point P, Point A, Point B){ double d1 = Dis

2013-12-17 17:14:02 893

转载 C语言平面几何1-数据类型的定义

数学中的部分概念在C语言中的定义如下(注:为了与数学一致,有些参数使用了大写):/* 点 */typedef struct point{ double x; double y;}Point;/* 向量 */typedef Point Vector;/* 线段AB */typedef struct segment{ Point A; Point B;}Segment;

2013-12-17 17:12:30 660

转载 C语言-向量基本概念

向量:既有大小又有方向的量叫向量。向量的模:向量的长度称为向量的模,用符号| |表示。零向量:长度为0的向量单位向量:长度为1的向量平面中,设有向量a={x1, y1},向量b={x2, y2},则有(1)       向量的加:a+b={x1+x2, y1+y2}(2)       向量的减:a-b={x1-x2, y1-y2}(3)       向量的点积(内积):

2013-12-17 17:10:26 2933

转载 匈牙利算法

用匈牙利算法求二分图的最大匹配什么是二分图,什么是二分图的最大匹配,这些定义我就不讲了,网上随便都找得到。二分图的最大匹配有两种求法,第一种是最大流(我在此假设读者已有网络流的知识);第二种就是我现在要讲的匈牙利算法。这个算法说白了就是最大流的算法,但是它跟据二分图匹配这个问题的特点,把最大流算法做了简化,提高了效率。匈牙利算法其实很简单,但是网上搜不到什么说得清楚的文章。

2013-12-03 20:38:02 444

原创 HDU3970.cpp

/*代码慢慢敲,教训*/#include#include#include#includeusing namespace std;#define size 1010#define INF 99999999int n,m,a,b,d,p,s,t;int S[size],dist[size],value[size];int map[size][size],cos[size][siz

2013-11-17 21:45:23 765

原创 HDU1867.cpp KMP中发生不匹配时,j=next[j],j的含义

#include#include#define size 100009void getnext(char *p,int *next){ int i,j; next[0]=-1; i=0,j=-1; int len=strlen(p); while(il2) i=l1-l2; while(i<l1 && jl2) printf("%s\n",ans2); else if(l10) printf("%

2013-11-14 15:17:28 738

原创 HDU1358.cpp(KMP学习)

/*字符串长度为n,那么n-next[n](字符串从0开始)是最小循环节, 如果n能整除n-next[n],周期为n/(n-next[n]);*/#include#include#define size 1000002int n;char s[size];int next[size];int temp;void getnext(){ int i,j;

2013-11-11 16:34:31 410

转载 KMP中的getnext函数中的周期原理,和重要性质

---------------------------------------------- k    m        x      j       i由上,next【i】=j,两段红色的字符串相等(两个字符串完全相等),s[k....j]==s[m....i]设s[x...j]=s[j....i](xj=ji)则可得,以下简写字符串表达方式kj=

2013-11-10 16:42:22 557

转载 POJ 2533 求最长上升子序列长度 非DP 实现

#include#include#define maxn 1001using namespace std;int stack[maxn],N;int main(){ scanf("%d",&N); int top=0; stack[0]=-1; for(int i=0;i<N;i++) { int temp;

2013-07-16 11:00:11 426

原创 POJ 2533 最长上升子序列长度的求解 DP实现

#include#include#define maxn 1001using namespace std;int N;//数据个数int a[maxn];//储存数据int dp[maxn];//dp[i]表示以i结束的最长上升子序列的最大长度 初始为1int main(){ while(~scanf("%d",&N)) { for(int i=1

2013-07-16 10:57:54 467

原创 HDU1232

http://acm.hdu.edu.cn/showproblem.php?pid=1232#include#include#define maxn 1001using namespace std;int parent[maxn],M,N;void UFset(int end){ for(int i=1;i<=end;i++) parent[i] =

2013-07-13 16:24:57 513

转载 01背包

http://acm.hdu.edu.cn/showproblem.php?pid=3466#include#include#include#includeusing namespace std;struct item{ int p,q,v; bool operator < (const item it ) const{ return q-p < it.q-it.

2013-07-13 12:13:06 383

原创 hdu 2955(Robberies)

背包变种 dp[j]表示不被抓的概率#include#include#define maxn 109#includeusing namespace std;int money[maxn];float caught[maxn],dp[maxn*maxn];int main(){ int T,banks; float limits; scanf("%d",&

2013-07-13 12:09:27 400

空空如也

空空如也

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

TA关注的人

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