jzoj 1397. 【2012.03.3普及组】寻找星座 解题报告

题目描述

 现在你在一张卫星图片中寻找星座,已知该星座在图片中正好出现一次,而且形状一样,方向一样,大小也一样。注意图片中可能有一些与该星座无关的星星。

例如图1中的星座出现在图2的卫星图片中(用圆圈标识部分)。图1中给定的星座需要在X轴上平移2个单位同时在y轴上平移-3个单位才能与卫星图片中的卫星正好吻合。

写一个程序,计算给定卫星需要在X和Y方向上分别平移多少单位才能与卫星图片吻合。

输入

第1行:一个整数M,表示需要寻找的星座中星星的数量;

第2..M+1行:每行两个用空格隔开的整数表示这M个星星的坐标;

第M+2行:一个整数N,表示卫星图片中星星的数量。

第M+3..M+N+2行:每行两个整数表示图片中星星的坐标。

注意:星座和卫星图片中任意两个星星都不重叠;1<=M<=200,1<=N<=1000,X,Y坐标值范围为0..1000000。

输出

输出一行,两个用空格隔开的整数dx,dy,表示需要在X,Y方向上平移的单位。

样例输入

5

8 5

6 4

4 3

7 10

0 10

10

10 5

2 7

9 7

8 10

10 2

1 2

8 1

6 7

6 0

0 9

样例输出

2 -3

数据范围限制

提示

样例输入输出










5



904207 809784

845370 244806

499091 59863

638406 182509

435076 362268

10

757559 866424

114810 239537

519926 989458

461089 424480

674361 448440

81851 150384

459107 795405

299682 6700

254125 362183

50795 541942

-384281 179674

其实这题看起来吓人,枚举就好啦,连搜索都不用
代码如下:
var
 x,y:array[0..1000]of longint;
 a,b:array[0..1000,1..2]of longint;
 n,m,i,j,s,k:longint;
begin
 readln(n);
 for i:=1 to  n do
  readln(a[i,1],a[i,2]);
 readln(m);
 for i:=1 to m do
  begin
   readln(b[i,1],b[i,2]);
   x[i]:=b[i,1]-a[1,1];
   y[i]:=b[i,2]-a[1,2];
  end;
 for i:=1 to m do
  begin
   s:=0;
  for j:=1 to n do
    for k:=1 to m do
     begin
      if  (b[k,1]=a[j,1]+x[i])and(b[k,2]-y[i]=a[j,2])
       then begin
              inc(s);
              break;
            end;
      end;
       if s=n then begin writeln(x[i],' ',y[i]);  break; end;
    end;
 end.


你可能感兴趣的:(枚举,水法)