AcWing 5298. 坐标变换(其二)
原题链接
简单
作者:
杨睿卿
,
2024-04-24 20:27:59
,
所有人可见
,
阅读 7
前缀和
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
int n,m;
//pair<int,double> p[100005];
double sumk[100005];
double suma[100005];
int main()
{
cin>>n>>m;
int x=0,y=0;
for(int i=0;i<=n;i++) sumk[i]=1;
for(int i=1;i<=n;i++)
{
int a;double b;
cin>>a>>b;
if(a==1) sumk[i]=b;
else suma[i]=b;
//p[i]={a,b};
}
for(int i=1;i<=n;i++)
{
sumk[i]*=sumk[i-1];
suma[i]+=suma[i-1];
}
while(m--)
{
int a,b;
double x,y;
cin>>a>>b>>x>>y;
x*=(sumk[b]/sumk[a-1]);
y*=(sumk[b]/sumk[a-1]);
double theta=suma[b]-suma[a-1];
double tx=x*double(cos(theta))-y*double(sin(theta));
double ty=x*double(sin(theta))+y*double(cos(theta));
x=tx;
y=ty;
// for(int i=a;i<=b;i++)
// {
// if(p[i].first==1)
// {
// x*=p[i].second;
// y*=p[i].second;
// }
// else
// {
// double tx=x*double(cos(p[i].second))-y*double(sin(p[i].second));
// double ty=x*double(sin(p[i].second))+y*double(cos(p[i].second));
// x=tx;
// y=ty;
// }
// }
printf("%f %f\n",x,y);
}
return 0;
}