Sokution : 用複數類可以使問題大大簡化
Code:
#include<cstdio>
#include<stack>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<map>
#include<complex>
using namespace std;
#define nMax 300
#define LL long long
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define CLR(a) memset((a),0,sizeof((a)))
#define DB double
#define pb push_back
#define mp make_pair
// ¿?¿?¿? C++ STL
typedef complex<double> Co;
int n;
Co M[nMax];
double a[nMax];
#define pi acos(-1.0)
Co ans[nMax];
int main() {
freopen("in.txt","r",stdin);
scanf("%d",&n);
double u,v;
rep(i,n) {
scanf("%lf%lf",&u,&v);
M[i] = Co(u,v);
}
rep(i,n) {
scanf("%lf",&a[i]);
a[i] = a[i]/180.0*pi;
}
Co x(1,0),y(0,0);
rep(i,n) {
Co b(cos(a[i]),sin(a[i]));
x *= b;
y -= M[i];
y *= b;
y += M[i];
}
y = -y;
x -= Co(1,0);
ans[0] = y/x;
x=Co(1,0),y=Co(0,0);
rep(i,n) {
Co b(cos(a[i]),sin(a[i]));
x *= b;
y -= M[i];
y *= b;
y += M[i];
ans[i+1]=x*ans[0]+y;
}
rep(i,n) {
printf("%.2lf %.2lf\n",ans[i].real(),ans[i].imag());
}
return 0;
}