QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#645699#9467. K-Dimensional FoilAfterlife#WA 0ms3796kbC++203.8kb2024-10-16 19:31:502024-10-16 19:31:50

Judging History

This is the latest submission verdict.

  • [2024-10-16 19:31:50]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 3796kb
  • [2024-10-16 19:31:50]
  • Submitted

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";
    }
}

Details

Tip: Click on the bar to expand more detailed information

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'