思路,还是暴力求解,直接对每一个操作进行遍历,最后结果保留三位小数,但是不知道为什么直接printf("%.3f",x)进行输出没有分,结果完全对得上,以下是80分提交代码,可能大的测试点没有通过,也不知道怎么回事,如果有读者有更好的方式可以在评论区留言。(不知道用结构体数组会不会好一点)
#include<bits/stdc++.h>
using namespace std;
vector<int> op;//记录操作类型
vector<double> point;//记录操作参数
vector<double> x;//变换后的x
vector<double> y;//变换后的y
int main(){
int n,m;//操作数和查询个数
int i,j;//查询需要用到的参数,开始-结束-横坐标-纵坐标
double x1,y1;
int op1;
double point1;
cin>>n>>m;
double x2,y2;
for(int i=0;i<n;i++){
cin>>op1>>point1;
op.push_back(op1);
point.push_back(point1);
}
for(int start=0;start<m;start++){
cin>>i>>j>>x1>>y1;
for(int i1=i-1;i1<j;i1++){//开始遍历算x,y
if(op[i1]==1){//操作1
//operation1(x1,y1,point[i1]);
x1=point[i1]*x1;
y1=point[i1]*y1;
}else if(op[i1]==2){//操作2
//operation2(x1,y1,point[i1]);
double x2=x1;
x1=x1*cos(point[i1])-y1*sin(point[i1]);
y1=x2*sin(point[i1])+y1*cos(point[i1]);
}
}
x.push_back(x1);
y.push_back(y1);
}
for (int i = 0; i < m; i++) {
std::cout << std::fixed << std::setprecision(3) << x[i];
cout << " ";
std::cout << std::fixed << std::setprecision(3) << y[i] << endl;
}
}