12月18, 2016

代码捉鬼2

2016BCPC(北航校赛)的C题 题意很简单,一道初中数学课堂上讲过的题目。 强势 WA 1小时,近20发。具体代码没有从现场赛带回,回来随便做了一下就 A 了。努力模拟了一下,估计是现场赛时写出了下面这样的代码。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    int t;
    int R, H, a1, a2, h1, h2, h;
    double ans, a;
    cin >> t;
    while(t--){
        cin >> R >> H >> a1 >> h1 >> a2 >> h2;
        h = 2 * H - (h1 + h2);
        if (a2 > a1) swap(a1, a2);
        a = min(a1 - a2, 360 - (a1 - a2));
        a = 2.0 * R * acos(-1.0) * a / 360.0;
        ans = sqrt(h * h + a * a);
        cout << fixed << setprecision(2) << ans << "\n";
    }
}

问题就在于题目中[latex]H \leq 10^{6}[/latex],这个范围没有超过 int 的范围,但是[latex]H^{2}[/latex]就超过了,改成 long long 可破。 现场时想了半天是不是精度问题,eps 从[latex]1e-3[/latex]试到[latex]1e-9[/latex],想来是最近被精度搞得敏感了。 表之以提醒自己以后要注意数据变化范围。 代码捉鬼1

本文链接:https://sxing.xyz/post/代码捉鬼2.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。