일단 소스를 보고 시작한다.
program main;
uses sysutils;
type
Point=Record
x:int64;
y:int64;
end;
PointArray=Array[1..100000] of Point;
var
T,N:integer;
i:integer;
arr:PointArray;
A:Real;
P:Point;
procedure DFS(idx:integer;pt:Point;c:integer);
var
i:integer;
begin
if(c=0)then
begin
for i:=idx to N do
begin
pt.x:=pt.x-arr[i].x;
pt.y:=pt.y-arr[i].y;
end;
if(A>pt.x*pt.x+pt.y*pt.y)then
begin
A:=pt.x*pt.x+pt.y*pt.y;
end;
end
else
begin
if(idx<>N)then
begin
for i:=idx to N do
begin
pt.x:=pt.x+arr[i].x;
pt.y:=pt.y+arr[i].y;
DFS(i+1,pt,c-1);
pt.x:=pt.x-arr[i].x;
pt.y:=pt.y-arr[i].y;
pt.x:=pt.x-arr[i].x;
pt.y:=pt.y-arr[i].y;
end;
end;
end;
end;
begin
readln(T);
while(T<>0)do
begin
readln(N);
for i:=1 to N do
read(arr[i].x,arr[i].y);
P.x:=0;
P.y:=0;
A:=99999999999999999999;
DFS(1,P,N div 2);
writeln(FormatFloat( '##0.000000',sqrt(A)));
T:=T-1;
end;
end.
이 소스는 백준 온라인 저지 1007번 vector matching 문제의 솔루션이다.
https://www.acmicpc.net/problem/1007
이 소스에서 배울수 있는것은,
Pascal 은 문법이 C와 정말 다르다.
여러가지 언어를 해보았지만, 언어중에 서로 비슷한 언어는 없다. 정말 연산자와 함수사용법등이 비슷한 C,C++,Java만 해도 정말 다르다.
언어가 비슷하다는건 패러다임이 비슷할뿐 그 이상 그 이하도 아니다.
어디가서 C와 Perl은 비슷해서 사용하기 쉽대. 라는 말은 하고다니지말자.
심지어 C와 C++도 비교대상 자체가 아니다.