luogu P1487失落的成绩单
程序员文章站
2022-07-13 13:55:52
...
n<60,显然不用矩阵乘法
由题目的递推式可得,ai= -2a(i-1)+a(i-2)+2d
an=-2a(n-1)+a(n-2)+2d
将右边一直分解,显然可以得到一个只含a2的方程式,将a2解出来后,就可以通过递推式求出am
(数据大了还是要矩阵乘法的)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<map>
#include<cmath>
using namespace std;
int num_a2[70],n,m;
double v[70],a[70],an,d;
int main(){
scanf("%ld%ld%lf%lf%lf",&n,&m,&d,&a[1],&an);
a[n]=an;
a[0]=0;
if(n==0||m==0){
printf("0.000\n");
return 0;
}
num_a2[1]=0;
num_a2[2]=1;
v[1]=a[1];
v[2]=0;
for(int i=3;i<=n;i++){
num_a2[i]=-2*num_a2[i-1]+num_a2[i-2];
}
for(int i=3;i<=n;i++){
v[i]=-2*v[i-1]+v[i-2]+2*d;
}
a[2]=(a[n]-v[n])/num_a2[n];
for(int i=3;i<=m;i++){
a[i]=-2*a[i-1]+a[i-2]+2*d;
}
printf("%.3f\n",a[m]);
}
上一篇: 在IDEA中动态的指定Maven镜像源
推荐阅读