時間限制: 1000 ms 空間限制: 131072 KB 具體限制
Goto ProblemSet
題目描述
現在你在一張衛星圖片中尋找星座,已知該星座在圖片中正好出現一次,而且形狀一樣,方向一樣,大小也一樣。注意圖片中可能有一些與該星座無關的星星。
例如圖中的星座出現在圖的衛星圖片中(用圓圈標識部分)。圖中給定的星座需要在軸上平移個單位同時在軸上平移個單位才能與衛星圖片中的衛星正好吻合。 寫一個程序,計算給定星座的星星需要在和方向上分別平移多少單位才能與衛星圖片吻合。
輸入
第行:一個整數M,表示需要尋找的星座中星星的數量;
第行:每行兩個用空格隔開的整數表示這M個星星的座標;
第行:一個整數N,表示衛星圖片中星星的數量。
第行:每行兩個整數表示圖片中星星的座標。 注意:星座和衛星圖片中任意兩個星星都不重疊;座標值範圍爲。
輸出
輸出一行,兩個用空格隔開的整數,表示需要在方向上平移的單位。
樣例輸入
樣例輸入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;
}
}
}