社区讨论

过不了 Subtask 1 求调

P1883【模板】三分 / 函数 / [ICPC 2010 Chengdu R] Error Curves参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mid616tt
此快照首次捕获于
2025/11/24 21:11
3 个月前
此快照最后确认于
2025/11/24 21:46
3 个月前
查看原帖
我觉得我代码的精度已经写得很高了,但还是过不了 Subtask #1。
讨论区我能找到的问题比如初始化极小值和精度误差我已经尽力避免了,代码如下。此为提交链接。
CPP
pair < long double , pair < long double , long double > > a[10005];
int n;
long double calc(long double x)
{
    long double maxx = -1e18;
    for(int i = 1 ; i <= n ; i++)
    {
        maxx = max(maxx , a[i].first * x * x + a[i].second.first * x + a[i].second.second);
    }
    return maxx;
}
void solve()
{
    read(n);
    for(int i = 1 ; i <= n ; i++)
    {
        read(a[i].first , a[i].second.first , a[i].second.second);
    }
    long double l = 0 , r = 1000;
    long double ans = 0;
    while(abs(r - l) > 1e-12)
    {
        long double lmid = (l + l + r) / 3.0;
        long double rmid = (l + r + r) / 3.0;
        if(calc(lmid) < calc(rmid))
        {
            r = rmid;
            ans = rmid;
        }
        else
        {
            l = lmid;
        }
    }
    cout << fixed << setprecision(4) << calc(ans) << endl;
}
signed main()
{
    int t;
    read(t);
	while(t--)
    {
        solve();
    }
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...