[ create a new paste ] login | about

Link: http://codepad.org/RdLoeZAs    [ raw code | output | fork ]

C++, pasted on Nov 10:
#include<bits/stdc++.h>
using namespace std;
const long double EPS=1e-8;
int main()
{
    int t;
    cin>>t;
    for(int cs=1; cs<=t; cs++)
    {
        long double s,r1,r2,r3;
        cin>>s>>r1>>r2>>r3;
        long double tarea=(sqrt(3)*s*s)/4.0;

        long double sec1=(60.0/360.0)*acos(-1)*r1*r1;
        long double sec2=(60.0/360.0)*acos(-1)*r2*r2;
        long double sec3=(60.0/360.0)*acos(-1)*r3*r3;

        long double height=(sqrt(3.0)*s)/2.0;
        if(r1>height)
        {
            double h=r1-height;
            double arr=r1*r1*acos((r1-h)/r1)-(r1-h)*sqrt(2*r1*h-h*h);
            sec1-=arr;
        }
        if(r2>height)
        {
            double h=r2-height;
            double arr=r2*r2*acos((r2-h)/r2)-(r2-h)*sqrt(2*r2*h-h*h);
            sec2-=arr;
        }
        if(r3>height)
        {
            double h=r3-height;
            double arr=r3*r3*acos((r3-h)/r3)-(r3-h)*sqrt(2*r3*h-h*h);
            sec3-=arr;
        }
//        if(r1+r2<=s && r2+r3<=s && r3+r1<=s)
//        {
//            cout<<"Case #"<<cs<<": "<<fixed<<setprecision(10)<<tarea-(sec1+sec2+sec3)<<endl;
//            continue;
//        }
//        else if(r1>=s || r2>=s || r3>=s)
//        {
//            cout<<"Case #"<<cs<<": "<<fixed<<setprecision(10)<<0.0<<endl;
//            continue;
//        }
        bool flag=false;
        long double bad=sec1+sec2+sec3;
        //cout<<tarea<<" "<<bad<<" "<<sec1<<" "<<height<<endl;
      //  cout<<"initial bad = "<<bad<<endl;
        if(!(r1+r2<=s))
        {
            long double p=(r1+r2+s)/2.0;
            long double area=p*(p-r1)*(p-r2)*(p-s);
            area=sqrt(area);
            long double H=(2.0*area)/s;

            if(fabs(H+r3-height)<EPS || H+r3>height) flag=true;
           // cout<<"------"<<area<<" "<<H<<endl;
            //calculating for sec1
            long double side=sqrt(r1*r1-H*H);
            long double narea=0.5*H*side;

            long double rad=acos(H/r1);
            long double deg=(180*rad)/acos(-1);
            long double kun=60-(180.0-(90+deg));

            narea=narea+(kun/360.0)*acos(-1)*r1*r1;
            long double cut=sec1-narea;

            //cout<<sec1<<"---"<<narea<<"==="<<cut<<"        "<<side<<endl;
            //calculating for sec2

            side=sqrt(r2*r2-H*H);
            narea=0.5*H*side;
            rad=acos(H/r2);
            deg=(180*rad)/acos(-1);
            kun=60-(180.0-(90+deg));

            narea=narea+(kun/360.0)*acos(-1)*r2*r2;
            cut=cut+(sec2-narea);

          //  cout<<cut<<" "<<side<<endl;
            bad-=cut;
        }
       // cout<<"after r1--r2, bad = "<<bad<<endl;
        if(!(r3+r2<=s))
        {
            long double p=(r3+r2+s)/2.0;
            long double area=p*(p-r3)*(p-r2)*(p-s);
            area=sqrt(area);
            long double H=(2.0*area)/s;

            if(fabs(H+r1-height)<EPS || H+r1>height) flag=true;
            //cout<<"------"<<area<<" "<<H<<endl;
          //  calculating for sec1
            long double side=sqrt(r3*r3-H*H);
            long double narea=0.5*H*side;

            long double rad=acos(H/r3);
            long double deg=(180*rad)/acos(-1);
            long double kun=60-(180.0-(90+deg));

            narea=narea+(kun/360.0)*acos(-1)*r3*r3;
            long double cut=sec3-narea;

            //cout<<sec1<<"---"<<narea<<"==="<<cut<<"        "<<side<<endl;
           // calculating for sec2

            side=sqrt(r2*r2-H*H);
            narea=0.5*H*side;
            rad=acos(H/r2);
            deg=(180*rad)/acos(-1);
            kun=60-(180.0-(90+deg));

            narea=narea+(kun/360.0)*acos(-1)*r2*r2;
            cut=cut+(sec2-narea);

            //cout<<cut<<" "<<side<<endl;
            bad-=cut;
        }
        //cout<<"after r2--r3, bad = "<<bad<<endl;
        if(!(r1+r3<=s))
        {
            long double p=(r1+r3+s)/2.0;
            long double area=p*(p-r1)*(p-r3)*(p-s);
            area=sqrt(area);
            long double H=(2.0*area)/s;

            if(fabs(H+r2-height)<EPS || H+r2>height) flag=true;
           // cout<<"------"<<area<<" "<<H<<endl;
           // calculating for sec1
            long double side=sqrt(r1*r1-H*H);
            long double narea=0.5*H*side;

            long double rad=acos(H/r1);
            long double deg=(180*rad)/acos(-1);
            long double kun=60-(180.0-(90+deg));

            narea=narea+(kun/360.0)*acos(-1)*r1*r1;
            long double cut=sec1-narea;

            //cout<<sec1<<"---"<<narea<<"==="<<cut<<"        "<<side<<endl;
           // calculating for sec2

            side=sqrt(r3*r3-H*H);
            narea=0.5*H*side;
            rad=acos(H/r3);
            deg=(180*rad)/acos(-1);
            kun=60-(180.0-(90+deg));

            narea=narea+(kun/360.0)*acos(-1)*r3*r3;
            cut=cut+(sec3-narea);

            //cout<<cut<<" "<<side<<endl;
            bad-=cut;
        }
        //cout<<"after r3--r1, bad = "<<bad<<endl;
        //cout<<tarea<<" "<<bad<<endl;
        long double ans=tarea-bad;
        if(flag==true)
            ans=0;
        cout<<"Case #"<<cs<<": "<<fixed<<setprecision(10)<<max((long double)0,ans)<<endl;
    }
}


Output:
1
Line 23: error: bits/stdc++.h: No such file or directory


Create a new paste based on this one


Comments: