LightOJ – 1056 – Olympics

Problem link

আলোচনাঃ
আমাকে a আর b এর অনুপাত দেয়া থাকবে। আমাকে a,b এর দৈর্ঘ্য বের করা লাগবে। আর একটা কথা বলা আছে যে, Track এর পরিসীমা হবে 400 মিটার। Track এর length = a কিন্তু width = s হবে। তাই আমদের ‘s’ বের করা লাগবে।

উত্তরঃ
প্রশ্নে দেওয়া চিত্রটাকে আমরা নিচের চিত্রের মতো করে আঁকতে পারি। তাহলে একটা বৃত্তের ভেতর একটা আয়তক্ষেত্র আছে। এখন বৃত্তের কেন্দ্র যদি O হয়, তাহলে ব্যাসার্ধ OA = r এবং ব্যাস, AC = 2r হবে। অপরদিকে , যেহেতু আয়তক্ষেত্রের বিপরীত বাহুগুলো সমান তাই,
AB = DC = a এবং AD = BC = b.

Olympics
Olympics ( Image 1)

তাহলে △ADC হতে পাই,
(2r)^2 = b^2 + a^2
=>r = sqrt((b^2 + a^2))/2 ——-(1)

অপরদিকে, বৃত্তচাপ , s = rθ —-(2)

উপরের চিত্র থেকে লিখতে পারি, cosθ = (r*r + r*r – b*b)/(2.0*r*r).এখান থেকে θ এর মান বের করতে পারবো।

আমরা জানি, আয়তক্ষেত্রের পরিসীমা = 2(a+b). কিন্তু এখানে b=s হবে। তাই আমরা লিখতে পারি,
2(a+s) = 400
=> 2(a+rθ) = 400 [ From (2) ] —(3)

এখন , a আর b হচ্ছে অনুপাত। তো আমরা ধরে নিই length,width = x. তাহলে অনুপাতের সাথে x এর মান গুণ দিলেই length এবং width এর মান পাবো।

From (3),
=> 2(ax+xrθ) = 400
=> x(2a+2rθ) = 400
So,x = 400/(2a+2rθ)
এখন, x এর মান বের করে a,b এর সাথে গুণ দিলেই বাহুর দৈর্ঘ্য পাবো।

C++ Code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define PI acos(-1.0)
const int N=105;

int main(){
 
    double t,n,a,b;
    int c=1;
    scanf("%lf",&t);
    while(t--){
 
        scanf("%lf : %lf",&a,&b);
        double radius=sqrt(a*a+b*b)/2.0;
        double theta=acos((2.0*radius*radius-b*b)/(2.0*radius*radius));
        double s=radius*theta; 
        double x=400.0/(2*a+2*s);
        double length=x*a,width=x*b;
 
        printf("Case %d: %.10f %.10f\n",c++,length,width);
 
    }
}

Related Problem – Agent J

Leave a Reply