Can Someone Help Me With Newton's Coding Challenge Solutions?
Разница между en3 и en4, 206 символ(ов) изменены
Hi guys,↵


I gave the Newton's coding challenge held today and could solve only 4, I got 15+ WAs on 5th and couldn't solve the 6th problem.↵
Can anyone please tell me the solution for the last problem and if possible tell me the error in my code for 5th problem?↵


Also feel free to use the comment section to discuss other solutions as well.↵

[Please visit this link to see a screenshot of the problem statement of P5](https://ibb.co/HFDnLBR)↵

[Please visit this link to see a screenshot of the problem statement of P6](https://ibb.co/MsNzpS1)↵

<spoiler summary="My Code For P5">↵
~~~~~↵
//Nightmare05↵
#include<bits/stdc++.h>↵

using namespace std;↵

#define sp << " " <<↵
#define mod 1000000007↵
#define mp make_pair↵
#define pb push_back↵
#define int long long↵
#define double long double↵
#define INF (1e18+13)↵
#define PI 3.1415926535898↵

int power(int p,int j)↵
{↵
    int res=1;↵
    p=p%mod;↵
    while(j>0)↵
    {↵
        if(j&1)↵
            res=(res*p)%mod;↵
        j=j>>1;↵
        p=(p*p)%mod;↵
    }↵
    return res;↵
}↵


mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());↵

int dice(int d,int p)↵
{↵
    uniform_int_distribution<int> uid(d,p);//specify l and s.↵
    return uid(rng) ;↵
}↵

double s(double m1,double m2,double c1,double c2,double c3,double c4)↵
{↵
    double x1,x2,x3,x4,y1,y2,y3,y4;↵
    x1=(c2-c1)/(m1-m2);↵
    x2=(c3-c2)/(m2-m1);↵
    x3=(c4-c3)/(m1-m2);↵
    x4=(c1-c4)/(m2-m1);↵
    y1=m1*x1+c1;↵
    y2=m2*x2+c2;↵
    y3=m1*x3+c3;↵
    y4=m2*x4+c4;↵
    double d[4];↵
    d[0]=(y2-y1)*(y2-y1)+(x2-x1)*(x2-x1);↵
    d[1]=(y3-y2)*(y3-y2)+(x3-x2)*(x3-x2);↵
    d[2]=(y4-y3)*(y4-y3)+(x4-x3)*(x4-x3);↵
    d[3]=(y1-y4)*(y1-y4)+(x1-x4)*(x1-x4);↵
    sort(d,d+4);↵
    if(abs(d[3]-d[0])<0.01)↵
        return sqrt((d[0]+d[3])/2)+26.0;↵
    else↵
        return -1;↵
}↵

int32_t main()↵
{↵
    ios::sync_with_stdio(false);↵
    cin.tie(0);↵
    cout.tie(0);↵
    //freopen("elimination_validation_input.txt", "r", stdin);↵
    //freopen("output.txt", "w", stdout);↵
    int t;↵
    cin >> t;↵
    while(t--)↵
    {↵
        double dp=-1;↵
        double x1,x2,x3,x4,y1,y2,y3,y4;↵
        pair<double,double> a[4];↵
        cin >> a[0].first >> a[0].second >> a[1].first >> a[1].second >> a[2].first >> a[2].second >> a[3].first >> a[3].second;↵
        for(int j=0;j<6;j++)↵
        {↵
            if(j==1||j==3||j==5)↵
                swap(a[2],a[3]);↵
            if(j==2||j==4)↵
                swap(a[1],a[3]);↵
            x1=a[0].first;↵
            y1=a[0].second;↵
            x2=a[1].first;↵
            y2=a[1].second;↵
            x3=a[2].first;↵
            y3=a[2].second;↵
            x4=a[3].first;↵
            y4=a[3].second;↵
            for(double i=0.0;i<=1.0;i+=0.0001)↵
            {↵
                double m1=i*PI;↵
                m1=tan(m1);↵
                double c1=y1-m1*x1,c3=y3-m1*x3;↵
                double m2=-1/m1;↵
                if(m1==0.00000)↵
                    m2=tan(PI/2);↵
                double c2=y2-m2*x2,c4=y4-m2*x4;↵
                int h=1;↵
                double p[3];↵
                p[0]=y2-m1*x2-c1;↵
                p[1]=y3-m1*x3-c1;↵
                p[2]=y4-m1*x4-c1;↵
                if(abs(p[0])>abs(p[1])||abs(p[2])>abs(p[1]))↵
                    h=0;↵
                sort(p,p+3);↵
                for(int z=0;z<3;z++)↵
                    if(abs(p[z])<0.0000000001)↵
                        h=0;↵
                if(p[0]*p[2]<0)↵
                    h=0;↵
                p[0]=y1-m2*x1-c2;↵
                p[1]=y3-m2*x3-c2;↵
                p[2]=y4-m2*x4-c2;↵
                if(abs(p[0])>abs(p[2])||abs(p[1])>abs(p[2]))↵
                    h=0;↵
                sort(p,p+3);↵
                for(int z=0;z<3;z++)↵
                    if(abs(p[z])<0.0000000001)↵
                        h=0;↵
                if(p[0]*p[2]<0)↵
                    h=0;↵
                p[0]=y2-m1*x2-c3;↵
                p[1]=y1-m1*x1-c3;↵
                p[2]=y4-m1*x4-c3;↵
                if(abs(p[0])>abs(p[1])||abs(p[2])>abs(p[1]))↵
                    h=0;↵
                sort(p,p+3);↵
                for(int z=0;z<3;z++)↵
                    if(abs(p[z])<0.0000000001)↵
                        h=0;↵
                if(p[0]*p[2]<0)↵
                    h=0;↵
                p[0]=y2-m2*x2-c4;↵
                p[1]=y3-m2*x3-c4;↵
                p[2]=y1-m2*x1-c4;↵
                if(abs(p[1])>abs(p[0])||abs(p[2])>abs(p[0]))↵
                    h=0;↵
                sort(p,p+3);↵
                for(int z=0;z<3;z++)↵
                    if(abs(p[z])<0.0000000001)↵
                        h=0;↵
                if(p[0]*p[2]<0)↵
                    h=0;↵
                if(h)↵
                    dp=max(dp,s(m1,m2,c1,c2,c3,c4));↵
            }↵
        }↵
        if(dp<26)↵
            cout << -1 << endl;↵
        else↵
            cout << fixed << setprecision(2) << dp << endl;↵
    }↵
    return 0;↵
}↵
~~~~~↵
</spoiler>↵

I would be really thankful if someone can point out, exactly what edge cases did I miss!↵

Cheers!!!↵

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
en5 Английский Nightmare05 2020-10-30 22:08:23 103
en4 Английский Nightmare05 2020-10-30 22:03:33 206 Added the problem statements
en3 Английский Nightmare05 2020-10-30 21:25:37 1392
en2 Английский Nightmare05 2020-10-30 21:21:17 4 Tiny change: 'ee to use comment ' -> 'ee to use the comment '
en1 Английский Nightmare05 2020-10-30 21:19:13 6288 Initial revision (published)