Sunday, August 27, 2017

10773 - Back to Intermediate Math Uva Problem Solution & Logic

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1714


এখন ,এরকম সমস্যার সম্মুখীন আমরা এর আগেও হয়েছি , অনেকবার । মনে আছে কি ??  ইন্টারমিডিয়েটে থাকতে , ফিজিক্সে এরকমের অনেক প্রোবলেম দেয় থাকতো .। ।
চলো , দেখি এবার - আসলে কাহিনী হচ্ছে টা কি ??????

তোমাকে নদীর বেগ v, নৌকার বেগ u, এবং নদীর পাড়ের দুরুত্ত d, দেওয়া থাকবে ইনপুটে । তোমায় প্রিন্ট করতে হবে সর্বনিম্ন পথে যেতে যে  সময় লাগে  ??? এবং , সর্বনিম্ন সময়ে যে পথ পাড়ি দেয়া যায় - এই দুই সময়ের মাঝে'র ডিফারেন্স ।।


এখন নদীর গতি অপেক্ষা করে  এক পাড় থেকে অন্য পাড় যেতে সরবনিম্ন সময় লাগবে  t1=d/u;
এক পাড় থেকে অন্য পাড় সজাসজি ( সর্বনিম্ন পথে )  যেতে সময় t2 বের করিঃ

চিত্র থেকে বুঝা যাচ্ছে r=sqrt(u*u-v*v) ।

সুতরাং ,  সর্বনিম্ন পথে  যেতে সময়  t2=d/sqrt(u*u-v*v) ।

এক্ষেত্রে লক্ষ রাখতে হবে যে  u<v হলে error দেখাবে। কারন রুট ওভার  এর ভিতরে মান  negative হতে পারে না।

যাই হোক , সুত্রগুলো তো বোঝা শেষ - এবার খুবই  সাবধানে  কোড দেখে ফেলি চলো ---


#include<bits/stdc++.h>

using namespace std;
int main()
{
    long long t,i,j;
    double t1,t2,t3,u,v,d;
    cin>>t;
    for(i=1; i<=t; i++)
    {
        cin>>d>>v>>u;
        {
            if(v>=u)
                cout<<"Case "<<i<<": "<<"can't determine\n";
            else
            {
                t1=(d/u);
                t2=(d/(sqrt(u*u-v*v)));
                //cout<<t1<<" "<<t2<<" "<<t1-t2<<endl;
                t3=t2-t1;
                if(t3<=0)
                    cout<<"Case "<<i<<": "<<"can't determine\n";
                else
                   {
                          cout<<"Case "<<i<<": ";
                printf("%.3lf\n",t3);}
            }
        }
    }
    return 0;
}

No comments:

Post a Comment