输出nan求助?
查看原帖
输出nan求助?
227728
冰糖鸽子TJ鸽子协会楼主2021/6/14 16:18

RT,下面这组就会输出nan

385 978
344 18  (CF #5)

代码:


// Problem: CF24D Broken robot
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/CF24D
// Memory Limit: 250 MB
// Time Limit: 2000 ms
// Powered by CP Editor (https://github.com/cpeditor/cpeditor)

#include <bits/stdc++.h>
using namespace std;
#define M 1010
int n,x,m,y;
double f[M][M],a[M][M],c[M];
void Made(int x)
{
	a[1][1]=a[m][m]=2,a[1][2]=a[m][m-1]=-1,c[1]=f[x+1][1]+3,c[m]=f[x+1][m]+3;
	for(int i=2;i<m;i++) a[i][i]=3,a[i][i-1]=a[i][i+1]=-1,c[i]=f[x+1][i]+4;
}
void Solve(int x)
{
	double pmu;
	for(int i=2;i<=m;i++)
	{
		pmu=-a[i-1][i-1];
		a[i][i]*=pmu,a[i][i+1]*=pmu,c[i]*=pmu;
		a[i][i]-=a[i-1][i];a[i][i+1]-=a[i-1][i+1];c[i]-=c[i-1];a[i][i-1]=0;
	}
	f[x][m]=c[m]/a[m][m];
	for(int i=m-1;i>=1;i--)
	{
		f[x][i]=(c[i]-a[i][i+1]*f[x][i+1])/a[i][i];
	}
}
int main()
{
	cin>>n>>m>>x>>y;
	if(n==1||n==x) {printf("%.10lf",0);return 0;}
	if(m==1) {printf("%.10lf",2*(n-x));return 0;}
	for(int i=n-1;i>=1;i--) Made(i),Solve(i);
	printf("%.10lf",f[x][y]);
	return 0;
}
2021/6/14 16:18
加载中...