(紀中)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;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章