QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#645699 | #9467. K-Dimensional Foil | Afterlife# | WA | 0ms | 3796kb | C++20 | 3.8kb | 2024-10-16 19:31:50 | 2024-10-16 19:31:50 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-9;
using vd=vector<double> ;
vd operator +(const vd &a,const vd &b)
{
vd v(a.size());
for(int i=0;i<a.size();i++)
v[i]=a[i]+b[i];
return v;
}
vd operator *(const vd &a,double p)
{
vd v=a;
for(auto &x:v)
x*=p;
return v;
}
int T;
vd solve(int D,vector<vd> a,int &ok)
{
int n=D;
for(int i=0;i<a.size();i++)
{
int r=-1;
for(int j=i;j<a.size();j++)
if(r==-1||fabs(a[j][i]>a[r][i]))
r=j;
if(fabs(a[r][i])<eps)
continue;
for(int k=0;k<n+1;k++)
swap(a[i][k],a[r][k]);
for(int k=0;k<a.size();k++)
{
if(k==i)
continue;
double c=a[k][i]/a[i][i];
a[k]=(a[k]+a[i]*(-c));
}
}
vd ret;
for(int i=n;i<a.size();i++)
if(fabs(a[i][n])>eps)
{
ok=0;
return {};
}
for(int i=n-1;i>=0;i--)
{
if(fabs(a[i][i])<eps)
{
if(fabs(a[i][n])<eps)
assert(0);
else
{
ok=0;
return {};
}
}
a[i][n]/=a[i][i];
a[i][i]=1;
ret.push_back(a[i][n]);
for(int j=0;j<i;j++)
{
double w=a[j][i];
a[j][n]-=w*a[i][n];
a[j][i]=0;
}
}
reverse(ret.begin(),ret.end());
return ret;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>T;
while(T--)
{
int n;
cin>>n;
vector<vd>d(n,vd(n));
vector<vd>x(n,vd(3));
for(int i=0;i<n;i++)
for(int j=0;j<3;j++)
cin>>x[i][j];
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
cin>>d[i][j];
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
{
for(int k=0;k<3;k++)
d[i][j]-=(x[i][k]-x[j][k])*(x[i][k]-x[j][k]);
}
int D=0;
x.clear();
x.push_back({});
int ans=1;
for(int u=1;u<n;u++)
{
vector<vd> f;
for(int i=0;i+1<u;i++)
{
vd a;
for(int j=0;j<D;j++)
a.push_back(-2*(x[i+1][j]-x[i][j]));
a.push_back(d[i+1][u]-d[i][u]);
for(int j=0;j<D;j++)
a.back()-=x[i+1][j]*x[i+1][j]-x[i][j]*x[i][j];
f.push_back(a);
}
int ok=1;
auto res=solve(D,f,ok);
if(ok)
{
double U=d[0][u];
for(int j=0;j<D;j++)
U-=(x[0][j]-res[j])*(x[0][j]-res[j]);
if(fabs(U)<-eps)
ans=0;
else
{
if(fabs(U)<eps)
x.push_back(res);
else
{
D++;
for(auto &X:x)
X.push_back(0);
res.push_back(sqrt(U));
x.push_back(res);
}
}
}
else
{
ans=0;
}
}
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
{
double U=d[i][j];
for(int k=0;k<D;k++)
U-=(x[i][k]-x[j][k])*(x[i][k]-x[j][k]);
if(fabs(U)>eps)
ans=0;
}
if(!ans)
cout<<"Goodbye World!\n";
else
cout<<D+3<<"\n";
}
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3796kb
input:
3 3 0 0 1 0 0 2 0 0 3 10 20 26 3 1 0 0 2 0 0 3 0 0 3 7 20 3 0 0 0 1 1 1 2 2 2 3 12 3
output:
5 5 3
result:
wrong answer 2nd lines differ - expected: 'Goodbye World!', found: '5'