⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex.dpr

📁 tongji acm-online judge solution
💻 DPR
字号:
{
	check(a,b,p,q) //p>=q
	let the diagonal of the rectangle with edge a,b be L
	let the rectangle with edge p,q be Rect
	let the center of the rectangle be O
	Discuss at which points the circle O whose radii is L intersect Rect.
}
program Ural_1234(Input,Output);
const
	Epsilon=1E-15;
type
	TData=Extended;
function ArcCos(X:TData):TData;
begin
	if X=0 then Result:=Pi/2
	else
	begin
		Result:=ArcTan(Sqrt(1-Sqr(X))/X);
		if Result<0 then Result:=Result+Pi;
	end;
end;
function OverZero(X:TData):Boolean;
begin
	Result:=(X>=-Epsilon);
end;
function Check(A,B,P,Q:TData):Boolean;//p>=q
var
	Ls,Theta,Alpha,Beta:TData;
begin
	Ls:=Sqr(A/2)+Sqr(B/2);

	//get min angle between diagonal
	Theta:=ArcCos(Sqrt(Sqr(A/2)/Ls));
	if Theta>ArcCos(Sqrt(Sqr(B/2)/Ls)) then Theta:=ArcCos(Sqrt(Sqr(B/2)/Ls));
	Theta:=2*Theta;

	if Ls<=Sqr(Q/2) then //see figure1.gsp
		Result:=true
	else if (Sqr(Q/2)<Ls) and (Ls<=Sqr(P/2)) then //see figure2.gsp 
	// the rectangle intersect the circle O whose radii is sqrt(ls) at 4 point
		Result:=(Theta<=ArcCos(1-Sqr(Q)/2/Ls))
	else if (Sqr(P/2)<Ls) and (Ls<=Sqr(P/2)+Sqr(Q/2)) then //see figure3.gsp
	// the rectangle intersect the circle O whose radii is sqrt(ls) at 8 point
	begin
		Alpha:=2*ArcCos(Sqrt(1-Sqr(P/2)/Ls));
		Beta:=2*ArcCos(Sqrt(Sqr(Q/2)/Ls));
		Result:=(OverZero(Theta-(Alpha+Beta)/2) and OverZero(Alpha-Theta)) or OverZero((Alpha-Beta)/2-Theta);
		Alpha:=2*ArcCos(Sqrt(1-Sqr(Q/2)/Ls));
		Beta:=2*ArcCos(Sqrt(Sqr(P/2)/Ls));
		Result:=Result or (OverZero(Theta-(Alpha+Beta)/2) and OverZero(Alpha-Theta)) or OverZero((Alpha-Beta)/2-Theta);
	end
	else //see figure4.gsp
		Result:=false;
end;
procedure Main;
var
	A,B,C,D,E:TData;
	T:TData;
begin
	Readln(A,B,C,D,E);
	if D<E then 
	begin
		T:=D;
		D:=E;
		E:=T;
	end;
	if Check(A,B,D,E) or Check(A,C,D,E) or Check(B,C,D,E) then
		Writeln('YES')
	else
		Writeln('NO');
end;
begin
{$IFNDEF ONLINE_JUDGE}
	Assign(Input,'i.txt');
	Reset(Input);
	Assign(Output,'o.txt');
	Rewrite(Output);
{$ENDIF}
	Main;
{$IFNDEF ONLINE_JUDGE}
	Close(Input);
	Close(Output);
{$ENDIF}
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -