NYOJ 298-点的变换(经典矩阵解决点平移、缩放、翻转和旋转)

题目地址:NYOJ 298

思路:该题如果用对每个点模拟的操作,时间复杂度为O(n+m),结果肯定超时。然而利用矩阵乘法可以在O(m)的时间内把所有的操作合并为一个矩阵,然后每个点与该矩阵相乘可以得出最终的位置。

PS:十个利用矩阵乘法解决的经典题目 超级详细。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
const int maxn=1e5+10;
struct node {
    double mp[5][5];
} q[maxn],res,init,ans;
struct node Mul(struct node x,struct node y) {
    struct node tmp;
    int i,j,k;
    for(i=0; i<3; i++) {
        for(j=0; j<3; j++) {
            tmp.mp[i][j]=0;
            for(k=0; k<3; k++)
                tmp.mp[i][j]=tmp.mp[i][j]+x.mp[i][k]*y.mp[k][j];
        }
    }
    return tmp;
}
int main() {
    int n,m,i,j;
    double a,b,bs,jd,hd;
    while(~scanf("%d %d",&n,&m)) {
        for(i=0; i


你可能感兴趣的:(NYOJ,数论)