欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

luogu P1487失落的成绩单

程序员文章站 2022-07-13 13:55:52
...

luogu P1487失落的成绩单
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]);
}
相关标签: 洛谷 题解