【发布时间】:2018-11-01 04:36:58
【问题描述】:
对于任何算法问题,允许出现 10-6 的错误。
我在第一个解决方案中将 long double 声明为变量并获得了 WA。
但是,当我将变量声明为 double 时,我得到了一个 AC。
我想知道为什么会做出这个决定,因为众所周知long double 比double 更准确。除了变量、输出方法,我没有改变任何东西。
这是我的代码:
#include <iostream>
#include <string>
#include <cmath>
#include <vector>
#include <queue>
#include <deque>
#include <algorithm>
using namespace std;
#define pi 3.141592653589
int main() {
double x;
double y;
double r = 0.0;
int n;
double len;
double ans = 0.0;
deque<double> dq;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x >> y;
len = sqrt(x* x + y * y);
if (len > r) {
r = len;
dq.clear();
if ((x > 0 && y <= 0) || (x >= 0 && y < 0))
dq.push_back(360.0 + (90 + atan2(x, y) * 180 * (-1) / pi));
else
dq.push_back(90+atan2(x, y) * 180 * (-1) / pi);
} else if (r == len) {
if ((x > 0 && y <= 0) || (x >= 0 && y < 0))
dq.push_back(360 + (90 + atan2(x, y) * 180 * (-1) / pi));
else
dq.push_back(90+atan2(x, y) * 180 * (-1) / pi);
}
}
sort(dq.begin(), dq.end());
if (dq.size() >= 2) {
for (int i = 0; i < dq.size() - 1; i++) {
ans = max(ans, dq[i + 1] - dq[i]);
}
ans = max(ans, 360 - dq.back() + dq.front());
printf("%0.6f", ans);
}
else
cout << "360.000000";
}
我所做的唯一更改是:
- 将
double更改为long double;和 - 将
printf格式说明符从f更改为lf。
【问题讨论】:
-
你能解释一下
WA和AC是什么吗?
标签: c++ variables double long-integer