[数竞题(雾)][CodeChef]PARSIN/[JZOJ4704]Math
来源:互联网 发布:淘宝首页装修素材下载 编辑:程序博客网 时间:2024/06/04 20:08
题目大意
有
题目分析
妈呀我搞的是OI不是IMO啊!
预备知识
首先你要会高中数学必修四的三角函数内容。
以下公式证明比较简单。我就不在此给出了,想要了解的可以自己去看书或查百度。
cos 和角公式:cos(α−β)=cos(α)cos(β)+sin(α)sin(β) cos(α+β)=cos(α)cos(β)−sin(α)sin(β)
sin 和角公式:sin(α−β)=sin(α)cos(β)−cos(α)sin(β) sin(α+β)=sin(α)cos(β)+cos(α)sin(β)
cos 二倍角公式:cos(2α)=cos2(α)−sin2(α)=cos2(α)−(1−cos2(α))=2cos2(α)−1 sin 二倍角公式:sin(2α)=2sin(α)cos(α)
推公式
有了这些东西,我们就可以愉快地推公式了。
令答案为
考虑当前
即
如果
我们要推公式了,咳咳:
两式相加:
然后除以二得到
然后我们发现这个和
整理得到
有了这些,我们直接矩阵乘法快速幂就好了。
时间复杂度
代码实现
#include <iostream>#include <cstring>#include <cstdio>#include <cmath>using namespace std;const int M=35;const int S=M<<1;typedef double db;struct matrix{ db num[S][S]; int r,c;}one,zero,mat;matrix operator*(matrix a,matrix b){ matrix c; c.r=a.r,c.c=b.c; for (int i=0;i<c.r;i++) for (int j=0;j<c.c;j++) { c.num[i][j]=0; for (int k=0;k<a.c;k++) c.num[i][j]+=a.num[i][k]*b.num[k][j]; } return c;}matrix operator^(matrix a,int y){ matrix ret=zero; for (;y;y>>=1,a=a*a) if (y&1) ret=ret*a; return ret;}db X,cosX,sinX,ans;int T,n,m,s;int main(){ freopen("math.in","r",stdin),freopen("math.out","w",stdout); for (scanf("%d",&T);T;T--) { scanf("%d%d%lf",&m,&n,&X); cosX=cos(X),sinX=sin(X),s=m+1<<1; memset(zero.num,0,sizeof zero.num),memset(one.num,0,sizeof one.num); zero.r=zero.c=one.r=one.c=s; for (int i=0;i<s;i++) zero.num[i][i]=1.0; for (int i=0;i<=m;i++) one.num[i][i+m+1]=1.0; for (int i=0;i<=m;i++) { one.num[i+m+1][i]=-1.0,one.num[i][i]=2*cosX; if (i) one.num[i-1][i]=sinX; } memset(mat.num,0,sizeof mat.num); mat.r=1,mat.c=s; mat.num[0][1]=sinX; mat=mat*(one^(n-1)); ans=mat.num[0][m]; if (ans>0) putchar('+'); else putchar('-'),ans=-ans; while (ans>10) ans/=10.0; while (ans<1) ans*=10.0; printf("%d\n",(int)ans); } fclose(stdin),fclose(stdout); return 0;}
1 0
- [数竞题(雾)][CodeChef]PARSIN/[JZOJ4704]Math
- Codechef PARSIN
- [CC PARSIN]math
- Math(CC PARSIN)
- 【CodeChef-PARSIN】Sine Partition Function【矩阵乘法】【DP】
- CodeChef FNCS(分块)
- CodeChef:Devasena(数论)
- CodeChef
- CodeChef
- CodeChef
- CodeChef
- (CodeChef
- CodeChef
- CodeChef
- CodeChef
- CodeChef
- CodeChef
- CodeChef
- BZOJ 1191 匈牙利算法
- 化装晚会(costume)暴力题解
- 如何设计一个优秀的API
- POJ1852 Ants
- 数据结构与算法(11)插值查找
- [数竞题(雾)][CodeChef]PARSIN/[JZOJ4704]Math
- 用keySet和entrySet取出元素
- Fragment 实现微信Tab显示
- MAtlib 的 cvAdaptiveThreshold 局部二值化
- 开关系统
- JVM虚拟机面试题
- Android面向百度编程的几个大坑
- XListView下拉刷新
- OpenCV中使用Eigenfaces 或 Fisherfaces进行人脸识别