主题:关于第69次编程比赛
boxertony
[专家分:23030] 发布于 2008-07-17 11:31:00
请在此贴提问。
题目贴:http://www.programfan.com/club/post-280816.html
回复列表 (共26个回复)
21 楼
ppc [专家分:3090] 发布于 2008-07-28 12:05:00
其实比较早就写好了,只是为了看看结果。后来也忘记贴了。
快速排序之类的不说,我说说我采用的判断点在三角形之内的方法。
转换三角形某点的坐标为(0,0),其他两个点的坐标分别为(x1,y1)和(x2,y2),点坐标为(x,y)。
按照下面的矩阵公式计算出u和v。当u>=0,v>=0并且u+v<=1的时候,点(x,y)在三角形之内。
[img]http://lh5.ggpht.com/LemonPig/SI06GJ0zMlI/AAAAAAAAAYY/DeYCYlmNpSE/s144/untitled.GIF.jpg[/img]
22 楼
boxertony [专家分:23030] 发布于 2008-07-29 09:44:00
to tjs125:
Shell排序法时间复杂度是O(n^1.3),不是O(nlogn)
to ppc:
我记得你好像没参赛啊,难道其中某个是你的马甲?呵呵
另外,你提供的这个算法,如何才能尽快的算出来?求矩阵的你也是件麻烦事啊。还有,他是否可以判断点在边上?如何判断?
23 楼
ppc [专家分:3090] 发布于 2008-07-29 10:14:00
我写好了,忘记贴上来了。呵呵。
矩阵转换一下就是一个比较简单的公式了,轻松地算出u和v,然后就可以判断了。
之所以是>=0以及<=1,这个=就是点在边上的时候。
24 楼
JackieRasy [专家分:3050] 发布于 2008-10-13 20:34:00
楼主能不能看一下这个程序:
基本思路就是把坐标变为以给定点开始的向量 那样求夹角方便一些
判定的标准就是3个点对应的向量中如果有两对以上夹角为直角或者钝角(也就是向量点乘的结果小于等于0)
但是若果有两个180°的角就说明三点共线了(我没有考虑有随机点跟给定点重合的情况)
在n个点里面选出3个 每种情况都要遍历 求出最小值。
#include<stdio.h>
#include<math.h>
int judge(int x[],int y[],int a,int b,int c)
{
int i=0,j=0,k=0;
if(x[a]*x[b]+y[a]*y[b]<=0)
if(x[a]*x[b]+y[a]*y[b]==-1) i++;
else j++;
if(x[c]*x[b]+y[c]*y[b]<=0)
if(x[c]*x[b]+y[c]*y[b]==-1) i++;
else j++;
if(x[a]*x[c]+y[a]*y[c]<=0)
if(x[a]*x[c]+y[a]*y[c]==-1) i++;
else j++;
if(i>=2) return(0); //如果i大于2就表明有两个钝角 这样就是三点一线了
else if(j>=2) return(1); //如果有两个以上的钝角或者直角就基本上可以肯定满足条件
else return(0); //这个函数就是判断下标为a b c的3个点是否满足条件
}
double mindistance(int x[],int y[],int n,int x0,int y0)
{
int i,j,k,flag=0;
double min=0;
for(i=0;i<n;i++)
{
x[i]=x[i]-x0;
y[i]=y[i]-y0;
} //把每个点的坐标改成以目标点为起点的向量坐标(上面的那个函数就是用向量的夹角判定)
k=2;
for(i=0;i<n;i++)
if(min<3*sqrt(x[i]*x[i]+y[i]*y[i]))
min=3*sqrt(x[i]*x[i]+y[i]*y[i]); //先赋值为可能的最大值
while(k!=n)
{
for(j=n-1;j>=0;j--)
for(i=j-1;i>=0;i--) //对每三个进行遍历啊
if(judge(x,y,i,j,k))
{
flag=1; //存在满足条件的结果
if(sqrt(x[i]*x[i]+y[i]*y[i])+sqrt(x[j]*x[j]+y[j]*y[j])+sqrt(x[k]*x[k]+y[k]*y[k])<min)
min=sqrt(x[i]*x[i]+y[i]*y[i])+sqrt(x[j]*x[j]+y[j]*y[j])+sqrt(x[k]*x[k]+y[k]*y[k]); //求最小值
}
}
if(flag) return(min);
return(0);
}
25 楼
JackieRasy [专家分:3050] 发布于 2008-10-13 20:45:00
您不用看了,我发现很低级的bug了
26 楼
xingxing01 [专家分:0] 发布于 2010-07-31 13:59:00
The one [url=http://www.toppowerlevel.net]wow power leveling[/url] thing on everyone's mind though is the new boss for the Vault of Archavon. Toravon the Ice Watcher is an [url=http://www.mogxe.com/PowerLevel.php?gid=1]wow power leveling[/url] ice giant located in the back of the zone just after the [url=http://www.toppowerlevel.net/powerlist.php?fid=688]wow power leveling[/url] first junction to the right before Archavon the Stone Watcher. The fight [url=http://www.mogxe.com/BuyGold.php?gid=1]wow gold[/url] is much like the other bosses in the dungeon and is a DPS race. Toravon can be seen [url=http://www.mogxe.com/BuyGold.php?gid=21]aion gold[/url] in 3D above.
Season 8 Start [url=http://www.mogxe.com/PowerLevel.php?gid=1]cheap wow power leveling[/url] Date
With all this said, there is [url=http://www.mogxe.com/PowerLevel.php?gid=1]buy wow power leveling[/url] no official date yet on when the new arena season will begin. But our prediction [url=http://www.toppowerlevel.net/buy.php]warcraft gold[/url] is that it will begin the same week that the Frostwing [url=http://www.toppowerlevel.net/powerlist.php?fid=7422]aion powerleveling[/url] Hall opens in Icecrown Citadel, which should be 2 weeks from now -- [url=http://www.mogxe.com/PowerLevel.php?gid=21]cheap aion power leveling[/url] on February 2, 2010.
我来回复