zoukankan
html css js c++ java
PKU1039
几何题
#include
<
math.h
>
#include
<
string
.h
>
#include
<
stdio.h
>
struct
Point
{
double
x,y;
}
;
struct
Line
{
double
x1, y1;
double
x2, y2;
}
;
int
n;
double
x[
20
],y[
20
];
Line line;
int
result;
double
dis;
Point cut(Line l)
{
double
a1, b1, a2, b2;
a1
=
(line.y2
-
line.y1)
/
(line.x2
-
line.x1);
b1
=
line.y1
-
a1
*
line.x1;
a2
=
(l.y2
-
l.y1)
/
(l.x2
-
l.x1);
b2
=
l.y1
-
a1
*
l.x1;
Point p;
p.x
=
(b2
-
b1)
/
(a1
-
a2);
p.y
=
a1
*
p.x
+
b1;
return
p;
}
double
ppdis(Point p1, Point p2)
{
return
sqrt((p1.x
-
p2.x)
*
(p1.x
-
p2.x)
+
(p1.y
-
p2.y)
*
(p1.y
-
p2.y));
}
double
distance()
{
double
dis1, dis2;
Point p1,p2,p3;
p1.x
=
0
, p1.y
=
(line.y2
-
line.y1)
/
(line.x2
-
line.x1)
*
(
0
-
line.x1)
+
line.y1;
Line line1, line2;
line1.x1
=
x[result
-
1
];
line1.y1
=
y[result
-
1
];
line1.x2
=
x[result];
line1.y2
=
y[result];
p2
=
cut(line1);
line2.x1
=
x[result
-
1
];
line2.y1
=
y[result
-
1
]
-
1
;
line2.x2
=
x[result];
line2.y2
=
y[result]
-
1
;
p3
=
cut(line2);
dis1
=
ppdis(p1,p2);
dis2
=
ppdis(p1,p3);
//
printf("%d %lf %lf\n",result, p2.x,p2.y);
if
(dis1
<
dis2)
return
dis2;
else
return
dis1;
}
bool
thro(
int
i)
{
double
holdy
=
(line.y2
-
line.y1)
/
(line.x2
-
line.x1)
*
(x[i]
-
line.x1)
+
line.y1;
if
(holdy
>=
y[i]
-
1
&&
holdy
<=
y[i])
return
1
;
else
return
0
;
}
int
cnt()
{
int
i;
for
(i
=
0
; i
<
n; i
++
)
{
if
(
!
thro(i))
break
;
}
return
i;
}
void
func()
{
int
i, j;
int
res;
for
(i
=
0
; i
<
n; i
++
)
{
for
(j
=
i
+
1
; j
<
n; j
++
)
{
line.x1
=
x[i];
line.y1
=
y[i];
line.x2
=
x[j];
line.y2
=
y[j];
res
=
cnt();
if
(result
<
res)
{
result
=
res;
dis
=
distance();
}
line.x1
=
x[i];
line.y1
=
y[i];
line.x2
=
x[j];
line.y2
=
y[j]
-
1
;
res
=
cnt();
if
(result
<
res)
{
result
=
res;
dis
=
distance();
}
line.x1
=
x[i];
line.y1
=
y[i]
-
1
;
line.x2
=
x[j];
line.y2
=
y[j];
res
=
cnt();
if
(result
<
res)
{
result
=
res;
dis
=
distance();
}
line.x1
=
x[i];
line.y1
=
y[i]
-
1
;
line.x2
=
x[j];
line.y2
=
y[j]
-
1
;
res
=
cnt();
if
(result
<
res)
{
result
=
res;
dis
=
distance();
}
}
}
}
int
main()
{
while
(scanf(
"
%d
"
,
&
n)
!=
EOF)
{
if
(n
==
0
)
break
;
result
=
0
;
dis
=
0
;
int
i;
for
(i
=
0
; i
<
n; i
++
)
{
scanf(
"
%lf%lf
"
,
&
x[i],
&
y[i]);
}
func();
/**/
/*
line.x1=0,line.y1=1,line.x2=4,line.y2=1;
int xx=thro(3);
printf("%d\n",xx);
*/
if
(result
<
n)
printf(
"
%.2f\n
"
,dis);
else
printf(
"
Through all the pipe.\n
"
);
}
return
0
;
}
查看全文
相关阅读:
图形2d,3d加速简介
[转]startx启动过程分析
initrd.img、vmlinux和 vmlinuz
TSQL建主键索引语句 / 外键
ASP.NET MVC 2.0在WinXP IIS6下的部署
update中加入select
Request
jqGrid使用总结
Jquery 表单取值赋值 处理返回json数据
108个搞笑经典短句(转)
原文地址:https://www.cnblogs.com/SQL/p/897746.html
最新文章
Iphone的发送短信邮件打电话代码示例
IPhone Developer 申请直到APP上架销售流程
PowerDesigner 15 生成SQL脚本
在xcode中使用memory Leaks和Instruments
C#与vb6 com组件的互相调用方法
给界面上任何控件截图并保存为PNG的方法
操作系统位数
GridView没有数据,仍然显示表头
windows2003安装后,屏幕上显示分辨率不支持(cannot display this video)
ASP.NET 用 FlexPaper 在页面上显示 PDF 文件
热门文章
vs 操作快捷键
访问 IIS 元数据库失败
robots.txt限制些什么屏蔽内容与安全性的考虑
rpm包与tar包到底有何区别?
进程
rpmbuild命令详解
[转]Grep学习笔记
[转]dpkg 和 rpm 的常用方法比较
yum
X系统和X启动流程
Copyright © 2011-2022 走看看