对于平面直角坐标系上的坐标 ( x , y ) (x,y) (x,y),小 P 定义了一个包含 n n n 个操作的序列 T = ( t 1 , t 2 , ⋅ ⋅ ⋅ , t n ) T=(t_1,t_2,···,t_n) T=(t1,t2,⋅⋅⋅,tn)。其中每个操作 t i ( 1 ≤ i ≤ n ) t_i(1 \leq i \leq n) ti(1≤i≤n) 包含两个参数 d x i dx_i dxi 和 d y i dy_i dyi,表示将坐标 ( x , y ) (x,y) (x,y) 平移至 ( x + d x i , y + d y i ) (x+dx_i,y+dy_i) (x+dxi,y+dyi) 处。
现给定 m m m 个初始坐标,试计算对每个坐标 ( x i , y i ) ( 1 ≤ j ≤ m ) (x_i,y_i)(1 \leq j \leq m) (xi,yi)(1≤j≤m) 依次进行 T T T 中 n n n 个操作后的最终坐标。
从标准输入读入数据。
输入共 n + m + 1 n+m+1 n+m+1 行。
输入的第一行包含空格分隔的两个正整数 n n n 和 m m m,分别表示操作和初始坐标个数。
接下来 n n n 行依次输入 n n n 个操作,其中第 i ( 1 ≤ i ≤ n ) i(1 \leq i \leq n) i(1≤i≤n) 行包含空格分隔的两个整数 d x i dx_i dxi、 d y i dy_i dyi。
接下来 m m m 行依次输入 m m m 个坐标,其中第 j ( 1 ≤ j ≤ m ) j(1 \leq j \leq m) j(1≤j≤m) 行包含空格分隔的两个整数 x j x_j xj、 y j y_j yj。
输出到标准输出中。
输出共 m m m 行,其中第 j ( 1 ≤ j ≤ m ) j(1 \leq j \leq m) j(1≤j≤m) 行包含空格分隔的两个整数,表示初始坐标 ( x i , y i ) (x_i,y_i) (xi,yi) 经过 n n n 个操作后的位置。
3 2
10 10
0 0
10 -20
1 -1
0 0
21 -11
20 -10
第一个坐标 ( − 1 , − 1 ) (-1,-1) (−1,−1) 经过三次操作后变为 ( 21 , − 11 ) (21,-11) (21,−11);第二个坐标 ( 0 , 0 ) (0,0) (0,0) 经过三次操作后变为 ( 20 , − 10 ) (20,-10) (20,−10)。
全部的测试数据满足: n , m ≤ 100 n,m \leq 100 n,m≤100,所有输入数据 ( x , y , d x , d y ) (x,y,dx,dy) (x,y,dx,dy) 均为整数且绝对值不超过 100000 100000 100000。
#include
using namespace std;
int main(){
int n, m;
int x[100001], y[100001]; //x,y表示坐标
int dx[100001], dy[100001]; //dx,dy表示每次坐标变换数值
cin >> n >> m;
for(int i = 0; i < n; i++){
cin >> dx[i] >> dy[i]; //循环输入每次坐标变换数值
}
for(int i = 0; i < m; i++){
cin >> x[i] >> y[i]; //循环输入查询要变换的坐标个数
}
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
x[i] += dx[j]; //对横坐标进行数值变换,累加即可
y[i] += dy[j]; //对纵坐标进行数值变换,累加即可
}
cout << x[i] << " " << y[i] << endl; //输出结果时注意空格,此为题目要求!!!
}
return 0;
}
# 代码原理与C++完全相同,此处不再一一赘述
n, m = map(int, input().split())
dx = [0] * 100001
dy = [0] * 100001
x = [0] * 100001
y = [0] * 100001
for i in range(n):
dx[i], dy[i] = map(int, input().split())
for i in range(m):
x[i], y[i] = map(int, input().split())
for i in range(m):
for j in range(n):
x[i] += dx[j]
y[i] += dy[j]
print(x[i], y[i])
本题代码可以应用于解决坐标变换的问题。它主要用于对一组坐标进行平移操作,将给定的位移量(dx, dy)应用于一组初始坐标(x, y)上,然后输出平移后的坐标。
本题代码可以在以下场景中使用: