

推完一波式子之后发现是个矩阵23333.
其实只要发现是矩阵之后就是个水题了。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int tp;
struct node{
double a[65][65];
inline void clear(){
for(int i=0;i<65;i++)
for(int j=0;j<65;j++) a[i][j]=0;
}
node operator *(const node &u)const{
node r;
r.clear();
for(int k=1;k<=tp;k++)
for(int i=1;i<=tp;i++)
for(int j=1;j<=tp;j++) r.a[i][j]+=a[i][k]*u.a[k][j];
return r;
}
}x,ans;
int n,m,T;
double P,SIN,COS;
inline void build(){
x.clear();
for(int i=1;i<=m;i++){
x.a[i][i]=COS,x.a[i][i+m]=-SIN;
x.a[i+m][i]=SIN,x.a[i+m][i+m]=COS;
if(i>1){
x.a[i-1][i+m]=COS;
x.a[i+m-1][i+m]=SIN;
}
}
}
inline double solve(){
ans.clear();
for(int i=1;i<=tp;i++) ans.a[i][i]=1.00;
for(;n;n>>=1,x=x*x) if(n&1) ans=ans*x;
return ans.a[m+1][m];
}
int main(){
// freopen("sine.in","r",stdin);
// freopen("sine.out","w",stdout);
scanf("%d",&T);
while(T--){
scanf("%d%d%lf",&m,&n,&P),tp=m<<1;
SIN=sin(P),COS=cos(P),build();
printf("%lf
",solve());
}
return 0;
}