(纪中)1397. 寻找星座 (Standard IO)

时间限制: 1000 ms 空间限制: 131072 KB 具体限制
Goto ProblemSet


题目描述
现在你在一张卫星图片中寻找星座,已知该星座在图片中正好出现一次,而且形状一样,方向一样,大小也一样。注意图片中可能有一些与该星座无关的星星。
在这里插入图片描述
例如图11中的星座出现在图22的卫星图片中(用圆圈标识部分)。图11中给定的星座需要在XX轴上平移22个单位同时在yy轴上平移3-3个单位才能与卫星图片中的卫星正好吻合。 写一个程序,计算给定星座的星星需要在XXYY方向上分别平移多少单位才能与卫星图片吻合。


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

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

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

M+3..M+N+2M+3..M+N+2行:每行两个整数表示图片中星星的座标。 注意:星座和卫星图片中任意两个星星都不重叠;1<=M<=200,1<=N<=1000,X,Y1<=M<=200,1<=N<=1000,X,Y座标值范围为0..10000000..1000000

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


样例输入
样例输入1:
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:
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


样例输出
样例输出1:
2 -3
样例输出2:
-384281 179674


数据范围限制


解题思路
也算是纯模拟。。
先记下每一种可能的移动方式(用第一个要找的星座与卫星图片里的每个星座行列座标相求差,得出可能的移动方式),接着就是暴力枚举了。
上代码。。


代码

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,m,s,a[210][3],b[1010][3],x[1010],y[1010];
int main()
{
    scanf("%d",&m);
    for(int i=1; i<=m; i++)
        scanf("%d%d",&a[i][1],&a[i][2]);
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
        scanf("%d%d",&b[i][1],&b[i][2]);
        x[i]=b[i][1]-a[1][1];
        y[i]=b[i][2]-a[1][2];
    }
    for(int i=1; i<=n; i++)
    {
        s=0;
        for(int j=1; j<=m; j++)
            for(int k=1; k<=n; k++)
                if((b[k][1]==a[j][1]+x[i])&&(b[k][2]==a[j][2]+y[i]))
                {
                    s++;
                    break;
                }
        if(s==m)
        {
            printf("%d %d",x[i],y[i]);
            return 0;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章