QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#745864#8779. Square of Trianglesydzr00000WA 15ms3948kbC++176.1kb2024-11-14 12:04:382024-11-14 12:04:41

Judging History

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

  • [2024-11-14 12:04:41]
  • 评测
  • 测评结果:WA
  • 用时:15ms
  • 内存:3948kb
  • [2024-11-14 12:04:38]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const double eps=1e-6,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]&&b[3]+b[8]==b[2]+b[12])
    {
        if(!Less(c[3]+c[8],sr2*c[1])&&!Less(c[7]+c[12],sr2*c[1])&&Less(b[12],2*b[1])&&Less(b[8],2*b[1])&&Less(b[2],2*b[1])&&Less(b[3],2*b[1])&&Less(max(c[2]+c[12],c[3]+c[10]),c[1]+c[4]))
            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: 3880kb

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: 0
Accepted
time: 14ms
memory: 3808kb

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:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

result:

ok 20 lines

Test #3:

score: 0
Accepted
time: 14ms
memory: 3948kb

input:

20
1148639 3581051 1216206
9999916 7026968 270268
6013463 6013463 6756700
6013463 6013463 6756700
2608850 8630930 9445800
9862940 6448880 6939290
8631650 3682160 5184310
7504700 6652150 1917140
2359505 3170711 2299108
4027811 6760781 2960240
4679918 6106006 3178400
8153446 7975057 5222088
8849500 88...

output:

0
0
0
1
1
1
1
0
1
1
1
1
1
0
0
0
0
1
1
1

result:

ok 20 lines

Test #4:

score: 0
Accepted
time: 14ms
memory: 3776kb

input:

20
7300000 8100000 10000000
8100000 7300000 1000000
1000000 7300000 2900000
2900000 10000000 7300000
61728 8950560 9999936
7901184 4012320 4999968
8950560 3950592 4999968
4012320 123456 4999968
4494200 9932182 9932182
8381683 112355 9932182
5505395 9460291 9932182
9999595 4494200 9190639
5994936 671...

output:

1
1
0
0
0
1
0
0
0
0
0
1
1
0
0
0
0
1
0
0

result:

ok 20 lines

Test #5:

score: -100
Wrong Answer
time: 15ms
memory: 3904kb

input:

20
10000000 5078125 3828125
78125 5000000 5078125
1250000 10000000 6250000
5000000 6250000 1250000
7079600 5663680 1415920
7079600 796455 9999935
5663680 9999935 5752175
5663680 88495 5752175
4410468 1135368 9999972
5676840 4541472 5676840
4541472 5676840 5676840
8078580 742356 6288192
8345560 44707...

output:

1
1
0
0
0
1
1
1
1
1
0
0
0
1
0
0
0
1
0
0

result:

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