矩阵十题(1)
Matrix67大牛关于矩阵经典题目的链接: http://www.matrix67.com/blog/archives/276/ nyoj 298 点的变换 题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=298 经典题目1 给定n个点,m个操作,构造O(m+n)的算法输出m个操作后各点的位置。操作有平移、缩放、翻转和旋转 这里的操作是对所有点同时进行的。其中翻转是以坐标轴为对称轴进行翻转(两种情况),旋转则以原点为中心。如果对每个点分别进行模拟,那么m个操作总共耗 时O(mn)。利用矩阵乘法可以在O(m)的时间里把所有操作合并为一个矩阵,然后每个点与该矩阵相乘即可直接得出最终该点的位置,总共耗时 O(m+n)。假设初始时某个点的坐标为x和y,下面5个矩阵可以分别对其进行平移、旋转、翻转和旋转操作。预先把所有m个操作所对应的矩阵全部乘起来, 再乘以(x,y,1),即可一步得出最终点的位置。 注意:m个操作的矩阵连乘时必须左乘 代码如下: 1 #include<stdio.h> 2 #include<math.h> 3 #include<string.h> 4 #define N 5 5 struct Matrix 6 { 7 double a[N][N]; 8 }res,tmp,origin,ans,point