QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#745766#8779. Square of Trianglesydzr00000WA 11ms3952kbC++176.0kb2024-11-14 11:27:292024-11-14 11:27:29

Judging History

你现在查看的是最新测评结果

  • [2024-11-14 11:27:29]
  • 评测
  • 测评结果:WA
  • 用时:11ms
  • 内存:3952kb
  • [2024-11-14 11:27:29]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const double eps=1e-9,sr2=sqrt(2.00);
int a[5][4],b[13];
double c[13];
int P[5],Q[5][4];
inline bool Equals(const double &a,const double &b){return fabs(a-b)<=eps;}
inline bool Greater(const double &a,const double &b){return a-b>eps;}
inline bool Less(const double &a,const double &b){return a-b<(-eps);}
inline bool RtCheckD(const double &a,const double &b,const double &c){return Equals(a*a+b*b,c*c);}
inline bool RtCheckI(const int &a,const int &b,const int &c){return a+b==c;}
inline bool check()
//Each situation consists of 
//1. Equivalence relation
//2. Partial order relation
//3. Right triangle
{
    if(b[1]==b[2]&&b[1]+b[2]==b[3])
    {
        if(b[1]==b[4])
        {
            if(b[6]==b[7]&&b[9]==b[10]&&b[2]==b[12]&&Equals(c[5]+c[8]+c[11],c[3])&&!Less(c[6],c[3]*0.5)&&!Less(c[10],c[3]*0.5)&&Less(c[6],c[1])&&Less(c[10],c[2]))
                return true;
            if(b[6]==b[9]&&b[8]==b[11]&&Equals(c[5]+c[12],c[3])&&Equals(c[1],c[7]+c[10])&&Greater(c[6],c[3]*0.5)&&Less(c[6],c[1])&&Less(c[8],c[9]))
                return true;
            if(b[8]==b[1]&&b[9]==b[10]&&Equals(c[5]+c[12],c[3])&&Equals(c[6],c[7]+c[11])&&Greater(c[6],c[3]*0.5)&&Less(c[6],c[1])&&Less(c[9],max(c[8],c[12])))
                return true;
            if(b[11]==b[3]&&Equals(c[6]+c[9],c[10])&&Equals(c[8]+c[12],c[1])&&b[5]==b[7]&&Greater(c[10],c[4])&&Less(c[10],c[3])&&Less(c[9],max(c[8],c[4])))
                return true;
            if(b[5]==b[8]&&b[1]==b[7]&&b[11]==b[9]&&b[6]==b[10]&&b[12]==b[3]&&Less(c[5],c[4])&&Less(c[10],c[3])&&Less(c[9],c[3]))
                return true;
            if(b[6]==b[7]&&b[8]==b[10]&&Equals(c[5]+c[11],c[1])&&Equals(c[9]+c[12],c[3])&&Greater(c[6],c[4])&&Less(c[6],c[3])&&Less(c[8],max(c[7],c[11])))
                return true;
            if(b[9]==b[11]&&b[3]==b[12]&&Equals(c[6],c[10]+c[8])&&Equals(c[5]+c[7],c[1])&&Greater(c[6],c[4])&&Less(c[6],c[3])&&Less(c[9],c[12])&&Greater(c[9],c[7]))
                return true;
            if(b[6]==b[7]&&b[9]==b[10]&&b[12]==b[3]&&Equals(c[5]+c[8]+c[11],c[1])&&Greater(c[6],c[4])&&Greater(c[9],c[6])&&Greater(c[12],c[9]))
                return true;
        }
        if(b[3]==b[12]&&b[6]==b[10]&&b[5]==b[9]&&Equals(c[4]+c[7],c[1])&&Equals(c[8]+c[11],c[2])&&Greater(c[6],c[1])&&Less(c[6],c[3])&&Greater(c[5],c[8])&&Less(c[5],c[6]))
            return true;
    }
    if(b[1]==b[4]&&RtCheckI(b[1],b[2],b[3])&&RtCheckI(b[4],b[5],b[6])&&Greater(b[4],b[5])&&Greater(b[1],b[2]))
    {
        if(b[6]==b[7]&&b[9]==b[10]&&b[11]==b[3]&&Equals(c[2]+c[8],c[1])&&Equals(c[5]+c[12],c[1])&&Less(b[6],2*b[1])&&Less(b[3],2*b[1])&&Less(b[10],2*b[1]))
            return true;
        if(b[6]==b[8]&&b[3]==b[12]&&b[9]==b[10]&&Equals(b[9],b[1]*2)&&Equals(c[5]+c[7],c[1])&&Equals(c[2]+c[11],c[4])&&Less(c[3],c[10])&&Less(c[6],c[9]))
            return true;
        if(b[3]==b[9]&&b[6]==b[12]&&b[8]==b[11]&&Equals(c[10]+c[7],c[1])&&Equals(c[2]+c[5],c[1])&&!Less(c[8],c[1])&&Less(b[8],2*b[1]))
            return true;
        if(b[7]==b[10]&&b[11]==b[1]&&b[3]==b[8]&&Equals(c[9]+c[12],c[6])&&Equals(c[2]+c[5],c[1])&&Less(c[10],max(c[8],c[11])))
            return true;
        if(b[3]==b[11]&&b[6]==b[8]&&b[9]==b[10]&&Equals(c[5]+c[7],c[1])&&Equals(c[2]+c[12],c[1])&&Equals(b[1]*2,b[9])&&Less(c[3],c[9])&&Less(c[8],c[9]))
            return true;
        if(b[10]==b[3]&&b[9]==b[11]&&b[12]==b[6]&&Equals(c[5]+c[7],c[1])&&Equals(c[2]+c[8],c[4])&&Less(b[3],2*b[1])&&Less(b[9],2*b[4])&&Less(b[6],2*b[1])&&RtCheckI(b[7],b[8],b[9]))
            return true;
        if(b[7]==b[1]&&b[3]==b[9]&&b[6]==b[10]&&b[12]==b[8]&&Equals(c[2]+c[5]+c[11],c[1])&&Greater(c[8],c[6])&&Less(b[8],2*b[1]))
            return true;
    }
    if(RtCheckI(b[1],b[2],b[3])&&Greater(b[1],b[2]))
    {
        if(b[3]==b[11]&&b[12]==b[1]&&b[9]==b[1]&&b[6]==b[7]&&Equals(c[8]+c[5],c[10])&&Equals(c[2]+c[4],c[1])&&Greater(c[10],c[9])&&Less(b[10],2*b[1])&&Less(c[7],max(c[4],c[9]))&&RtCheckI(b[9],b[4],b[10]))
            return true;
        if(b[3]==b[11]&&b[9]==b[10]&&b[6]==b[7]&&b[12]==b[1]&&Equals(c[5]+c[8],c[1])&&Greater(c[10],c[1])&&Less(b[10],2*b[1])&&Greater(c[6],c[4])&&Less(c[6],c[9])&RtCheckI(b[4],b[5],b[6])&&Greater(b[4],b[5]))
            return true;
        if(b[8]==b[9]&&b[11]==b[1]&&b[7]==b[1]&&b[8]==b[6]&&Equals(c[12]+c[5],c[3])&&Equals(c[2]+c[4],c[1])&&Greater(c[6],c[4])&&Less(b[6],2*b[1])&&Less(b[10],2*b[1]))
            return true;
        if(b[3]==b[10]&&b[4]==b[1]&&b[7]==b[1]&&b[5]==b[8]&&Equals(c[6]+c[9],c[11])&&Equals(c[2]+c[12],c[1])&&Equals(b[11],2*b[1])&&!Less(c[5],0.5*c[11])&&Less(c[5],c[4])&&Greater(c[3],c[1]&&Less(c[3],c[11])))
            return true;
    }
    if(b[1]==b[4]&&b[11]==b[7]&&b[1]==b[11]&&b[8]==b[10]&&b[2]==b[5]&&Equals(c[3]+c[6],c[12]+c[9])&&Equals(c[3]+c[6],sr2*c[1])&&Less(c[8],max(c[7],c[11]))&&Less(c[2],max(c[1],c[4])))
        return true;
    if(b[1]==b[4]&&b[4]==b[11]&&b[11]==b[9]&&b[3]==b[5]&&b[6]==b[12]&&b[10]==b[8]&&b[2]==b[7]&&!Less(sr2*c[1],c[3]+c[8])&&!Less(sr2*c[1],c[7]+c[12])&&Less(b[12],2*b[1])&&Less(b[8],2*b[1])&&Less(b[2],2*b[1])&&Less(b[3],2*b[1]))
        return true;
    return false;
}
inline void solve()
{
    for(int i=1;i<=4;i++)
        for(int j=1;j<=3;j++)
            scanf("%d",&a[i][j]);
    iota(P+1,P+5,1);
    for(int i=1;i<=4;i++)
        iota(Q[i]+1,Q[i]+4,1);
    bool flg=false;
    do{
        auto dfs=[&](auto self,int dep)->void
        {
            if(dep==5)
            {
                int k=0;
                for(int i=1;i<=4;i++)
                    for(int j=1;j<=3;j++)
                        b[++k]=a[P[i]][Q[P[i]][j]];
                for(int i=1;i<=12;i++)
                    c[i]=sqrt(1.00*b[i]);
                flg|=check();
                return;
            }
            do{
                self(self,dep+1);
            }while(next_permutation(Q[dep]+1,Q[dep]+4));
        };
        dfs(dfs,1);
    }while(next_permutation(P+1,P+5));
    printf("%d\n",flg);
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--)
        solve();
    
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 3ms
memory: 3828kb

input:

3
1 1 2
2 1 1
2 1 1
1 2 1
1 1 1
1 1 1
1 1 1
1 1 1
5 125 130
125 20 145
45 130 145
145 145 80

output:

1
0
1

result:

ok 3 lines

Test #2:

score: -100
Wrong Answer
time: 11ms
memory: 3952kb

input:

20
1998001 7984010 9982009
1998001 7984010 1994005
7984010 9978013 9982009
9978013 1994005 7984010
9958045 7968034 9962037
7968034 1994005 9962037
9958045 1990013 7968034
1994005 1990013 7968034
7952074 9938097 1986025
7952074 9942085 1990013
7952074 9942085 9938097
1986025 7952074 1990013
7936130 9...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

result:

wrong answer 1st lines differ - expected: '1', found: '0'