广工校赛复盘EF题

E题:

cj 最近沉浸在线性代数的世界里不能自拔,今天又发现一条有趣的问题了。平面中有 一个三角形,三个顶点是(0,0),(1,0),(0,1),经过某种变换后三个顶点分别到了(2,2),(0,2),(2,0), 则原本的(1,1)点到了哪?聪明的 cj 一眼就看出了是在(0,0),此处掌声应用十万伏特!下 面的变换也实在是太过简单,因为每次所取的三个点的 x 坐标都不同,且非零,实在太简单 了,于是他决定把问题交给你 现给出一对三角形变换前后的坐标,请你算出其他点变换后的坐标 

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
double a00,a01,b00,a10,a11,b10;
int main(){
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    int cas;cin>>cas;
    while(cas--){
        double x1,y1,x2,y2,x3,y3;
        cin>>x1>>y1>>x2>>y2>>x3>>y3;
        double x4,y4,x5,y5,x6,y6;
        cin>>x4>>y4>>x5>>y5>>x6>>y6;
        a01=(x6-x4-(x3-x1)*(x5-x4)/(x2-x1)) / (y3-y1-(x3-x1)*(y2-y1)/(x2-x1));
        a00=(x5-x4-a01*(y2-y1)) / (x2-x1);
        b00=x4-a01*y1-a00*x1;
        a11=(y6-y4-(x3-x1)/(x2-x1)*(y5-y4)) / (y3-y1-(x3-x1)/(x2-x1)*(y2-y1));
        a10=(y5-y4-a01*(y2-y1)) / (x2-x1);
        b10=y4-a11*y1-a10*x1;
        //cout<<a00<<' '<<a01<<' '<<b00<<' '<<a10<<' '<<a11<<' '<<b10<<endl;
        int q;cin>>q;
        while(q--){
            double x,y;cin>>x>>y;
            cout<<int(a00*x+a01*y+b00)<<' '<<int(a10*x+a11*y+b10)<<endl;
        }
    }
    return 0;
}

F题:清一色(zzz跳过这题)

猜你喜欢

转载自blog.csdn.net/cj1064789374/article/details/88653100