Submission #3931988
Source Code Expand
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
struct P{
double x,y;
double abs()
{
return hypot(x,y);
}
P operator+(P b)
{
return{x+b.x,y+b.y};
}
P operator-(P b)
{
return{x-b.x,y-b.y};
}
};
P div(P a,P b)
{
return{a.x/a.abs()+b.x/b.abs(),a.y/a.abs()+b.y/b.abs()};
}
double theta(P a,P b)
{
double ret=atan2(b.y,b.x)-atan2(a.y,a.x);
ret=abs(ret);
if(ret>M_PI)ret=2*M_PI-ret;
return ret;
}
P take(P a,P b,double x)
{
P q=div(a,b);
double t=theta(a,b);
double k=x/q.abs()/sin(t/2);
return{q.x*k,q.y*k};
}
double cross(P a,P b){return a.x*b.y-a.y*b.x;}
bool in(P a,P b,P c,P p)
{
return cross(p-a,b-a)*cross(p-a,c-a)<=0
&&cross(p-b,c-b)*cross(p-b,a-b)<=0
&&cross(p-c,a-c)*cross(p-c,b-c)<=0;
}
double dis(P p,P a,P b)
{
double t=theta(b-a,p-a);
return sin(t)*(p-a).abs();
}
bool check(P a,P b,P c,double x)
{
P ab=take(a-c,b-c,x)+c,bc=take(b-a,c-a,x)+a,ca=take(c-b,a-b,x)+b;
if(!in(a,b,c,ab)||!in(a,b,c,bc)||!in(a,b,c,ca))return false;
if(dis(ab,a,b)<x||dis(bc,b,c)<x||dis(ca,c,a)<x)return false;
return (ab-bc).abs()>=2*x||(bc-ca).abs()>=2*x||(ca-ab).abs()>=2*x;
}
main()
{
P a,b,c;
cin>>a.x>>a.y>>b.x>>b.y>>c.x>>c.y;
double L=0,R=1e3;
for(int i=0;i<100;i++)
{
double M=(L+R)/2;
if(check(a,b,c,M))L=M;
else R=M;
}
cout<<fixed<<setprecision(15)<<L<<endl;
}
Submission Info
Submission Time |
|
Task |
B - Inscribed Bicycle |
User |
kotatsugame |
Language |
C++14 (GCC 5.4.1) |
Score |
500 |
Code Size |
1397 Byte |
Status |
AC |
Exec Time |
2 ms |
Memory |
384 KB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
500 / 500 |
Status |
|
|
Set Name |
Test Cases |
Sample |
example0.txt, example1.txt |
All |
000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, example0.txt, example1.txt |
Case Name |
Status |
Exec Time |
Memory |
000.txt |
AC |
2 ms |
384 KB |
001.txt |
AC |
2 ms |
256 KB |
002.txt |
AC |
1 ms |
256 KB |
003.txt |
AC |
1 ms |
256 KB |
004.txt |
AC |
2 ms |
256 KB |
005.txt |
AC |
1 ms |
256 KB |
006.txt |
AC |
2 ms |
256 KB |
007.txt |
AC |
1 ms |
256 KB |
008.txt |
AC |
1 ms |
256 KB |
009.txt |
AC |
1 ms |
256 KB |
010.txt |
AC |
1 ms |
256 KB |
011.txt |
AC |
1 ms |
256 KB |
012.txt |
AC |
1 ms |
256 KB |
013.txt |
AC |
2 ms |
256 KB |
014.txt |
AC |
2 ms |
256 KB |
015.txt |
AC |
1 ms |
256 KB |
example0.txt |
AC |
1 ms |
256 KB |
example1.txt |
AC |
1 ms |
256 KB |