思路,还是暴力求解,直接对每一个操作进行遍历,最后结果保留三位小数,但是不知道为什么直接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;
}
}