বৃহস্পতিবার, ২৩ আগস্ট, ২০১২

1385 - Kingdom Division



          Problem তা বেশ মজার । Geometry এর Beginner Level এ problem টি দেয়া থাকলেও আমার কাছে মনে হয়েছে তুলনামুলক ভাবে কঠিন । যাই হক চল Problem টির solution শুরু করা যাক ।  
         
Problem Statement:
        a,b,c দেয়া থাকবে input হিসেবে । Output দেখাতে হবে d এর । এইখানে a ,b ,c ,d হল যথাক্রমে Tri-angle BFX , BXC , CXE , AFXE এর ক্ষেত্রফল । 
                      



Have Fun

Problem Solution
                        ১।   d area টিকে ২টি ভাগে ভাগ করে ফেল । . একটি হল FEX (Let call its area d1),এবং আরেকটি হল FEA ( Let call its area d2).
                        ২।  লক্ষ করে দেখঃ
                                * The triangle BFX has area a. Let's say that its base is BX, and its height is h1
                                *  Then the base of FXE can be XE, and its height is also h1
                                 * Similarly, the triangle BXC can be said to have base BX and height h2.
                                 * And the triangle XEC has base XE and height h2.Knowing all these relations, and with a little algebra, you can deduce that d1 = a*c/b.
                                  * For the value of d2, there are many ways to get it. Use a similar reasoning, and triangles like AFE, AFC, BFE and BFC to deduce d2. If you try then you will find that (a+d1)/d2 = (a+b)/(c+d1+d2) 

             ৩। কাজেই result হবে d = d1+d2 . 
Critical Cases:

            যদি  a,b,c এর মান ০ দেয়া হয় তবে কি তোমার program তা ঠিক ঠাক মত output দিতে পারছে ? 

Program Code :
 #include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    int i,test;
    bool flag;
    double a,b,c,d1,d2;
    cin>>test;

    for(i=1;i<=test;i++)
    {
        flag=true;
        cin>>a>>b>>c;
        if(b!=0) d1 = (a*c)/b ;
        else flag=false;
        d2 = (a+d1) * (c+d1) ;
        if(b != d1 )
            d2 = d2/(b-d1);
        else
            flag=false;
        d1 = d1 + d2 ;
        if(!flag)
            printf("Case %d: -1\n",i);
        else if(d1<0)
            printf("Case %d: -1\n",i);
        else
            printf("Case %d: %.10lf\n",i,d1);
    }
    return 0;
}

 
 
       

1 টি মন্তব্য: