Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- http://mathworld.wolfram.com/CircularSegment.html
- http://mathcentral.uregina.ca/QQ/database/QQ.09.07/s/wayne1.html
- https://start.sketchometry.org/
- Editorial:
- কাজ হচ্ছেঃ আমাকে ভিতরের রেক্টেঙ্গেলের দৈর্ঘ্য ও প্রস্থের রেশীও দেয়া থাকবে। বের করতে হবে তাদের একচুয়াল ভ্যালু।
- অবসার্ভেশনঃ
- ১) স্টেটমেন্টে বলা আছে প্যারামিটার ৪০০ হবে । তাই আমাদের দৈর্ঘ্য এবং প্রস্থ অবশ্যই ৪০০ এর চেয়ে ছোট হবে।
- ২) এখানে মাঠের প্যারামিটার হবে দুইপাশের দৈর্ঘ্যের যোগফল এর সাথে বৃত্তের চাপ দুটির যোগফল। প্রস্থ যোগ হবে না।
- ৩) চতুর্ভূজের পাশে দুইটা বৃত্তের যে অর্ধাংশ দেয়া আছে। তাদেরকে পুর্ণ বৃত্ত ধরলে চতুর্ভূজের প্রস্থ দুটি হয় ঐ বৃত্তের দুটি জ্যা।
- ৪) চতুর্ভুজের দৈর্ঘ্যের অর্ধেক হচ্ছে বৃত্তের ব্যাসার্ধ্য।
- ৫) ব্যাসার্ধ জানি, জ্যা এর দৈর্ঘ্য জানি (Radius and Chord) তাহলে সেখান থেকে বৃত্তচাপ (arc) বের করে ফেলতে হবে।
- ৬) arc = radius*theta(s=rtheta), here theta = 2*sinInverse(chord/2*radius)
- ৭) আমরা বৃত্তচাপ জেনে গেলাম। আগে থেকেই দৈর্ঘ্য জানি তাই ২নং অনুযায়ী আমরা প্যারামিটার বের করতে পারবো।
- ৮) প্যারামিটার বের করার পর যদি দেখি তা ৪০০ এর উপরে তাহলে রেঞ্জ কমাবো, আর বড় হলে বাড়াবো।
- ৯) বাইনারি সার্চ চলবে প্রস্থের উপর। যেহেতু রেশীও দেয়া আছে, তাই রেশীও থেকে আমরা দৈর্ঘের একটি সমিকরন বের করতে পারি। সে সমিকরনে প্রস্থের বিভিন্ন মান ধরে দৈর্ঘ্য বের করে ১ থেকে ৮ নাম্বার স্টেপ অনুযায়ী বাইনারি সার্চ ১০০-১০০০বার চালালেই ফলাফল বের হয়ে আসবে।
- Code:
- #include <bits/stdc++.h>
- using namespace std;
- #define d(x) cout << #x << " = " << (x) << endl;
- #define fr freopen("in.txt", "r", stdin);
- #define fw freopen("out.txt", "w", stdout);
- #define mem(x) memset((x), 0, sizeof((x)));
- #define pb push_back
- #define ll long long
- #define fastIO ios_base::sync_with_stdio(false)
- #define sf scanf
- #define pf printf
- #define SQR(x) ((x)*(x))
- #define sc1(x) scanf("%d", &x)
- #define sc2(x, y) scanf("%d %d", &x, &y)
- #define sc3(x, y, z) scanf("%d %d %d", &x, &y, &z)
- #define FOR(i, x, y) for(int i=int(x); i<int(y); i++)
- #define ROF(i, x, y) for(int i=int(x-1); i>=int(y); i--)
- #define all(c) (c.begin(), c.end())
- #define unq(v) sort(all(v)), (v).erase(unique(all(v)),v.end())
- #define EPSILON (1.0E-8)
- #define siz 100000
- ///////////////////////////PRIME/////////////////////////////
- bool siv[siz];
- vector<ll> prime;
- void sieve();
- void pri();
- /////////////////////////////////////////////////////
- //////////////////////////Factorial//////////////////
- long long int fact(long long int n);
- int main(){
- #ifndef ONLINE_JUDGE
- clock_t tStart = clock();
- freopen("in.txt", "r", stdin);
- freopen("out.txt", "w", stdout);
- #endif
- int tc;
- cin >> tc;
- for(int tr = 1; tr <= tc; tr++){
- printf("Case %d: ", tr);
- double lr, wr;
- scanf("%lf : %lf", &lr, &wr);
- double mid;
- double left = 0;
- double right = 400.0; //statement theke assume korlam 400 er beshi hobei na kono vabe
- int limit = 1000;
- int i = 0;
- double w;
- double l;
- while(i < limit){
- mid = (left+right)/2.0; // mid ber korlam
- w = mid; //mid ta'ke width dhorlam
- l = ((lr*w)/wr); //ratio theke w diye l er man er somikoron
- double r = sqrt(((l/2.0)*(l/2.0))+ ((w/2.0) *(w/2.0))); //radius ber korlam (pythagoras diye) //amra chord/2 and l/2 diye ber kore felte pari
- double ans = r*((2.0)*(asin(w/(2*r)))); //radius and chord theke arc ber korlam
- double okay = l+l+ans+ans; //length ar arch jog kore parameter ber korlam
- if(okay <= 400){ //parameter 400 er choto naki boro check korlam
- left = mid; //choto hole left barbe
- }
- else{
- right = mid; // boro hole right kombe
- }
- i++;// loop ghuranor jonno.
- }
- printf("%lf %lf\n", l, w);
- // cout << l << " " << w << endl;
- }
- #ifndef ONLINE_JUDGE
- printf("\n>>Time taken: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC);
- #endif
- }
- //////////////////////////prime/////////////////////////////
- void sieve() {
- memset(siv, true, sizeof(siv));
- int root = sqrt(siz);
- for(int i = 2; i<=root; i++) {
- for(int j = i*2; j <= siz; j+=i) {
- siv[j] = false;
- }
- }
- }
- void pri() {
- sieve();
- siv[0] = false;
- siv[1] = false;
- for(int i = 0; i < siz; i++) if(siv[i] == true) prime.push_back(i);
- /////////////Checking whether the function is working with this print///////
- // cout << prime.size() << endl;
- }
- //////////////////////////Factorial//////////////////
- long long int fact(long long int n){
- long long int ans = 1;
- for(long long int i = 1; i <= n; i++){
- ans *= i;
- }
- return ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement