上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 18 下一页
构建模型非常重要。建图:把起点,终点,每个墙上的4个点分别看成图的顶点;把这些点中各对点连起来,如果与墙相交(判断两线段相交)则不连,然后floyd暴力一下。思路想到了就蛮清晰的,但我刚学计算几何,一直很纠结点写成结构体还是分开来写,调用的时候哪个比较方便,总觉得2个都很麻烦,诶,所以荒废了比较多的时间,以后不能这么2了。然后我把2种都写了一遍,写计算几何一定要注意规范。代码1:(函数调入点用double)View Code #include<stdio.h>#include<string.h>#include<math.h>#include<algo Read More
posted @ 2012-08-16 19:02 To be an ACMan Views(410) Comments(0) Diggs(0)
题目大意:给出四个点确定两条直线。如果是一条线输出“LINE”,如果平行输出“NONE”, 如果有交点输出交点坐标。思路:注意是直线,不是线段啊。用两点式推出两条直线方程 :(y1 - y2)x + (x2 - x1)y = x2y1 - x1y2;(y3 - y4)x + (x4 - x3)y = x4y3 - x3y4;a1x + b1y + c1 = 0;a2x + b2y + c2 = 0;D = a1b2 - a2b1; D1 = b1c2 - b2c1; D2 = c1a2 - c2a1;D != 0时, x = D1 / D, y = D2 / D; 得到交点坐标。D = 0时; Read More
posted @ 2012-08-15 23:46 To be an ACMan Views(301) Comments(2) Diggs(0)
若存在这样一条直线,过投影相交区域作直线的垂线,该垂线必定与每条线段相交,问题转化为问是否存在一条线和所有线段相交;若存在一条直线与所有线段相机相交,将该线旋转,平移,直到不能再动为止,此时该直线必定经过这些线段的某两个端点;所以枚举任意两个端点即可。需要注意的是,当枚举的两个端点很近的时候,即sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))<eps时,那么这两个点是可以认为重合的,由于如果把这两点的连线作为向量,向量的模会很小,就可能导致无论怎么做叉积结果都为0从而认为各个点都是和这两个点共线的。因此,在枚举两个端点的时候要避免这种情况,同时,避免枚举这种情况 Read More
posted @ 2012-08-15 19:47 To be an ACMan Views(216) Comments(0) Diggs(0)
在poj 2318的基础上 加上一个排序(因为板的坐标不是有序的),再加多一个统计就好了。View Code #include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;struct point{ int x, y;};struct node{ int up, down;}date[1007];int n, m;point toy[1007];point a, b;int ans[1007], cnt[1007];int cro Read More
posted @ 2012-08-15 14:33 To be an ACMan Views(192) Comments(0) Diggs(0)
第一题计算几何,1A,好开心哦。View Code #include<stdio.h>#include<string.h>#include<math.h>struct point{ int x, y;};int up[5007],down[5007];;int n, m;point toy[5007];point a, b;int ans[5007];int cross(point o, point a, point b){ return ((a.x-o.x)*(b.y-o.y)-(a.y-o.y)*(b.x-o.x));}int find(point ke Read More
posted @ 2012-08-15 14:15 To be an ACMan Views(190) Comments(0) Diggs(0)
计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板很重要,模板必须高度可靠。3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面大部分是模板。如果代码一片混乱,那么会严重影响做题正确率。4.注意精度控制。5.能用整数的地方尽量用整数,要想到扩大数据的方法(扩大一倍,或扩大sqrt2)。因为整数不用考虑浮点误差,而且运算比浮点快。一。点,线,面,形基本关系,点积叉积的理解POJ 2318 TOYS(推荐)http://acm.pku.edu.cn/JudgeOnline/problem?id=2318POJ 2398 Toy Storage( Read More
posted @ 2012-08-15 12:03 To be an ACMan Views(251) Comments(0) Diggs(0)
给n个物品,容量为m的包,要求这样的方案数:选中n个物品放入背包后,剩下的物品中,任意一个都放不进去。我们先将物品按容量从大到小排序。考虑以下2种情况:1. 考虑一种特殊情况,一个都放不进去,就是剩下物品中体积最小的那个(体积为w[1])都放不进去,这个情况就会无解,答案为0;2. 一般情况:从小到大枚举不放入背包的体积最小的,那么此时比它小的物品都应该放入背包中,此时背包装载容量应为[m-w[u]+1,m] (1<=u<=n)我们可以对剩下的u+1到n的物品做01背包,然后将可行的方案统计出来,这样,第u件物品考虑了u-1次,总复杂度为O(n^2*m);优化:n较大的话会超时,我 Read More
posted @ 2012-08-15 10:23 To be an ACMan Views(349) Comments(0) Diggs(0)
题意:某电台要广播一场比赛,该电台网络是由n个网点组成的一棵树,其中m个点为客户端,其余点为转发站。客户端i愿支付的钱为p[i],每一条边需要的花费固定,问电台在保证不亏损的情况下,最多能使多少个客户端接收到信息?广播台所在的节点编号为1分析:树形DP1.用dp[u][j]表示从转发站u开始计算,满足其子树中j个顾客的最大收益 分析节点u的孩子节点v a.放弃该孩子v,值不变 b.取该孩子的若干的节点:dp[u][j-k]+dp[u][k]-cost[i][j](cost[i][j]为连通该边所需要付出的代价。)所以状态转移方程为:dp[u][j]=max(dp[u][j],dp[u][j-k Read More
posted @ 2012-08-14 20:51 To be an ACMan Views(230) Comments(0) Diggs(0)
比较综合的题目。题意:有n个物品,有两辆车载重分别是c1,c2.问需要多少趟(c1,c2一起运一次就算1趟)能把物品运完。n比较小,只有10,而且需要把所有物品全部运完,便想到状态压缩来保存状态。首先记录好所有的可行状态,对于状态state能一趟运完。然后再利用01背包,dp[j],表示已运的状态为j,如果状态j与state[i]不冲突,则可以从状态j运一趟变为j|state[i]。View Code #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int n Read More
posted @ 2012-08-14 19:02 To be an ACMan Views(171) Comments(0) Diggs(0)
中文题,题意自己看树形DP将0设为根节点,总攻击数为m,背包容量应该是m+1(0点也看做城堡);基础的树形DP,自己推一下状态转移方程吧。View Code #include<stdio.h>#include<string.h>#include<vector>#include<algorithm>using namespace std;vector<int>edge[224];int dp[224][224];int p[224],m, n;void dfs(int u){ int i, j, k; dp[u][1]=p[u];//初 Read More
posted @ 2012-08-14 16:52 To be an ACMan Views(190) Comments(0) Diggs(0)
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 18 下一页