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
;
}
查看全文
相关阅读:
MySQL安装图解
程序员感触
一个人的生活
开始懂了
limit 检索记录行
Ajax的完整兼容各种浏览器版本代码
java.lang.UnsupportedClassVersionError: Unsupported major.minor version 49.0的错误 [转]
通信协议
SDK
毕业三个多月的感悟
原文地址:https://www.cnblogs.com/SQL/p/897746.html
最新文章
Dijkstra
The trouble of Xiaoqian
time函数获取时间与本地时间不一致
PHP上传大文件配置
2016-03-20 2016-03-28
A+Bproblem
分解质因数
兔子数量【转载】
水仙花数
HDU 1875 畅通工程再续
热门文章
结构体排序
algorithm库———count&&countif
筛素数
LCA__st算法&&树上倍增
queue队列
atoi函数——将字符串转换为整数
第一条题解!!!小学奥数——蓄水池水管问题
正是孤独让你出众
分析setting源代码获取sd卡大小
启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法
Copyright © 2011-2022 走看看