纯萌新,想问下为什么这题用cout会爆WA
  • 板块P1663 山
  • 楼主Lenlynn
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/11/16 19:35
  • 上次更新2023/10/27 02:45:25
查看原帖
纯萌新,想问下为什么这题用cout会爆WA
832997
Lenlynn楼主2022/11/16 19:35
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define drp(i, a, b) for (int i = (a); i >= (b); --i)

double arr[6000][5];
int n;

bool check(double y)
{
	double l=-2e9,r=2e9;
	rep(i,1,n-1){
		double k = arr[i][2],b=arr[i][3];
		double templ = -2e9,tempr = 2e9;
		if(k<0) templ = (y-b)/k;
		if(k>0) tempr = (y-b)/k;
		if(k==0) if(b>y) return false;
		if(tempr<l||templ>r) return false;
		l=max(l,templ),r=min(r,tempr);
	}
	return true;
}
int main()
{
	cin>>n;
	rep(i,1,n) cin>>arr[i][0]>>arr[i][1];
	rep(i,1,n-1){
		arr[i][2] = (arr[i+1][1]-arr[i][1])/(arr[i+1][0]-arr[i][0]);
		arr[i][3] = arr[i][1]-arr[i][2]*arr[i][0];
	}
	double left = 0,right = 1e6,ans=0;
	while(left<=right){
		double mid = (left+right)/2;
		if(!check(mid)) ans=mid,left = mid+0.01;
		else right = mid-0.01;
	}
	printf("%.2lf",ans);//这里换成cout<<ans就不行,会爆三个WA,直接丢失了小数点后的数据

	return 0;
}
2022/11/16 19:35
加载中...