关于本题浮点数的使用
查看原帖
关于本题浮点数的使用
1013142
Chizuru_Ichinose楼主2024/11/8 20:42

以下为100pts第一问的代码

bool check(int x)
{

	if(a[x] == 0)//速度不变
	{
		//如果速度本来就超速,且这段路程有摄像头,超速
		if(v[x] > V && (sum[L] - sum[d[x]-1] > 0))
		{
			q.push((node){d[x],L});
			return true;
		}
		//如果速度不超速或没有摄像头,不超速
		return false;
	}
	if(a[x] > 0)//加速度大于0
	{
		//速度本来就超速,还有摄像头,超速
		if(v[x] > V)
		{
			if(sum[L] - sum[d[x]-1] > 0)
			{
				q.push((node){d[x],L});
				return true;
			}
			return false;
		}
		//dis:加速加到超速距离
		int dis = d[x] + ceil((double)((V*V - v[x]*v[x])*1.0/(2.0*a[x])) + 1e-6);
		//如果超速时已经驶离,那么不超速
		if(dis > L) return false;
		//未驶离
		else
		{
			//超速时位置
			if(sum[L] - sum[dis-1] > 0)
			{
				q.push((node){dis,L});
				return true;
			}
			//如果有摄像头,超速
			else return false;
			//没有,不超速
		}
	}
	//加速度小于0
	if(a[x] < 0)
	{
		//如果本来不超速,则不超速
		if(v[x] <= V) return false;
		int dis = d[x] + floor((double)((V*V - v[x]*v[x])*1.0/(2.0*a[x])) - 1e-6);
		dis = min(dis,L);
		if(sum[dis] - sum[d[x]-1] > 0) 
		{
			q.push((node){d[x],dis});
			return true;
		}
		return false;
	}
}

以下为60pts第一问的代码

bool solve(int x)
{
	if(a[x] == 0)//速度不变
	{
		//如果速度本来就超速,且这段路程有摄像头,超速
		if(v[x] > V && (sum[L] - sum[d[x]-1] > 0))
		{
			q.push((node){d[x],L});
			return true;
		}
		//如果速度不超速或没有摄像头,不超速
		return false;
	}
	if(a[x] > 0)//加速度大于0
	{
		//速度本来就超速,还有摄像头,超速
		if(v[x] > V)
		{
			if(sum[L] - sum[d[x]-1] > 0)
			{
				q.push((node){d[x],L});
				return true;
			}
			return false;
		}
		//dis:加速加到超速距离
		int dis = d[x] + ceil((double)((V*V - v[x]*v[x])*1.0/(2.0*a[x])));
		//如果超速时已经驶离,那么不超速
		if(dis > L) return false;
		//未驶离
		else
		{
			//超速时位置
			if(sum[L] - sum[dis-1] > 0)
			{
				q.push((node){dis,L});
				return true;
			}
			//如果有摄像头,超速
			else return false;
			//没有,不超速
		}
	}
	//加速度小于0
	if(a[x] < 0)
	{
		//如果本来不超速,则不超速
		if(v[x] <= V) return false;
		int dis = d[x] + floor((double)((V*V - v[x]*v[x])*1.0/(2.0*a[x])));
		dis = min(dis,L);
		if(sum[dis] - sum[d[x]-1] > 0) 
		{
			q.push((node){d[x],dis});
			return true;
		}
		return false;
	}
}

60pts的代码计算 a > 0 及 a < 0 的情况出现了错误,其中,对于100pts的代码我对使用floor及ceil的两行代码添加了1e-6的玄学调试

求问两种写法在实际使用中为何会有差别(或者本题我的第一问解法本身出现了错误),以及能否在不使用浮点数的情况下保证答案正确?

2024/11/8 20:42
加载中...