QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#236843 | #7521. Find the Gap | sizihan | WA | 0ms | 3852kb | C++14 | 1.7kb | 2023-11-04 10:59:43 | 2023-11-04 10:59:44 |
Judging History
answer
#include <bits/stdc++.h>
#define db long double
using namespace std;
const int N = 51;
struct node
{
int x, y, z;
}a[N];
db b[4][4];
db out = 1e114;
int n;
db calc(db x1, db y1, db z1, db d1, db x2, db y2, db z2)
{
return sqrt((x1 * x2 + y1 * y2 + z1 * z2 + d1) * (x1 * x2 + y1 * y2 + z1 * z2 + d1) / (x1 * x1 + y1 * y1 + z1 * z1));
}
void guass(int i, int j, int k)
{
b[0][0] = a[i].x, b[0][1] = a[i].y, b[0][2] = a[i].z, b[0][3] = -1;
b[1][0] = a[j].x, b[1][1] = a[j].y, b[1][2] = a[j].z, b[1][3] = -1;
b[2][0] = a[k].x, b[2][1] = a[k].y, b[2][2] = a[k].z, b[2][3] = -1;
for(int i = 0;i < 3;i++)
{
int op = -1;
for(int j = i;j < 3;j++)
{
if(b[j][i])
{
op = j;
break;
}
}
if(op == -1)
return ;
if(op != i)
for(int j = i;j < 4;j++)
swap(b[i][j], b[op][j]);
db k = b[i][i];
for(int j = i;j < 4;j++)
b[i][j] /= k;
for(int j = i + 1;j < 3;j++)
{
db k = b[j][i];
for(int w = i;w < 4;w++)
b[j][w] -= k * b[i][w];
}
}
for(int i=2;i>=0;i--)
{
db w=b[i][3];
for(int j=i-1;j>=0;j--)
b[j][3]-=b[j][i]*w;
}
db x = b[0][3], y = b[1][3], z = b[2][3];
db ans = 0, ans1 = 0;
for(int i1 = 1;i1 <= n;i1++)
{
db p = calc(x, y, z, 1, a[i1].x, a[i1].y, a[i1].z);
ans = max(ans, p);
ans1 = min(ans1, p);
}
out = min(out, ans - ans1);
}
int main()
{
scanf("%d", &n);
for(int i = 1;i <= n;i++)
scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].z);
for(int i = 1;i <= n;i++)
{
for(int j = i + 1;j <= n;j++)
for(int k = j + 1;k <= n;k++)
guass(i, j, k);
}
if(out > 1e100)
printf("0\n");
else
printf("%.15Lf", out);
return 0;
}
/*
8
1 1 1
1 1 3
1 3 1
1 3 3
3 1 1
3 1 3
3 3 1
3 3 3
*/
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3852kb
input:
8 1 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 2 2 1 2 2 2
output:
0.707106781186548
result:
wrong answer 1st numbers differ - expected: '1.0000000', found: '0.7071068', error = '0.2928932'