广工校赛复盘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跳过这题)