Advertisement
arfin97

Blue158 - [LOJ 1056] Olympicshttp://mathcentral.uregina.ca/Q

Mar 11th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.68 KB | None | 0 0
  1. http://mathworld.wolfram.com/CircularSegment.html
  2. http://mathcentral.uregina.ca/QQ/database/QQ.09.07/s/wayne1.html
  3. https://start.sketchometry.org/
  4.  
  5. Editorial:
  6. কাজ হচ্ছেঃ আমাকে ভিতরের রেক্টেঙ্গেলের দৈর্ঘ্য ও প্রস্থের রেশীও দেয়া থাকবে। বের করতে হবে তাদের একচুয়াল ভ্যালু।
  7. অবসার্ভেশনঃ
  8. ) স্টেটমেন্টে বলা আছে প্যারামিটার ৪০০ হবে । তাই আমাদের দৈর্ঘ্য এবং প্রস্থ অবশ্যই ৪০০ এর চেয়ে ছোট হবে।
  9. ) এখানে মাঠের প্যারামিটার হবে দুইপাশের দৈর্ঘ্যের যোগফল এর সাথে বৃত্তের চাপ দুটির যোগফল। প্রস্থ যোগ হবে না।
  10. ) চতুর্ভূজের পাশে দুইটা বৃত্তের যে অর্ধাংশ দেয়া আছে। তাদেরকে পুর্ণ বৃত্ত ধরলে চতুর্ভূজের প্রস্থ দুটি হয় ঐ বৃত্তের দুটি জ্যা।
  11. ) চতুর্ভুজের দৈর্ঘ্যের অর্ধেক হচ্ছে বৃত্তের ব্যাসার্ধ্য।
  12. ) ব্যাসার্ধ জানি, জ্যা এর দৈর্ঘ্য জানি (Radius and Chord) তাহলে সেখান থেকে বৃত্তচাপ (arc) বের করে ফেলতে হবে।
  13. ) arc = radius*theta(s=rtheta), here theta = 2*sinInverse(chord/2*radius)
  14. ) আমরা বৃত্তচাপ জেনে গেলাম। আগে থেকেই দৈর্ঘ্য জানি তাই ২নং অনুযায়ী আমরা প্যারামিটার বের করতে পারবো।
  15. ) প্যারামিটার বের করার পর যদি দেখি তা ৪০০ এর উপরে তাহলে রেঞ্জ কমাবো, আর বড় হলে বাড়াবো।
  16. ) বাইনারি সার্চ চলবে প্রস্থের উপর। যেহেতু রেশীও দেয়া আছে, তাই রেশীও থেকে আমরা দৈর্ঘের একটি সমিকরন বের করতে পারি। সে সমিকরনে প্রস্থের বিভিন্ন মান ধরে দৈর্ঘ্য বের করে ১ থেকে ৮ নাম্বার স্টেপ অনুযায়ী বাইনারি সার্চ ১০০-১০০০বার চালালেই ফলাফল বের হয়ে আসবে।
  17.  
  18. Code:
  19. #include <bits/stdc++.h>
  20. using namespace std;
  21. #define d(x)                cout << #x << " = " << (x) << endl;
  22. #define fr                  freopen("in.txt", "r", stdin);
  23. #define fw                  freopen("out.txt", "w", stdout);
  24. #define mem(x)              memset((x), 0, sizeof((x)));
  25. #define pb                  push_back
  26. #define ll                  long long
  27. #define fastIO              ios_base::sync_with_stdio(false)
  28. #define sf                  scanf
  29. #define pf                  printf
  30. #define SQR(x)              ((x)*(x))
  31. #define sc1(x)              scanf("%d", &x)
  32. #define sc2(x, y)           scanf("%d %d", &x, &y)
  33. #define sc3(x, y, z)        scanf("%d %d %d", &x, &y, &z)
  34. #define FOR(i, x, y)        for(int i=int(x); i<int(y); i++)
  35. #define ROF(i, x, y)        for(int i=int(x-1); i>=int(y); i--)
  36. #define all(c)              (c.begin(), c.end())
  37. #define unq(v)              sort(all(v)), (v).erase(unique(all(v)),v.end())
  38. #define EPSILON    (1.0E-8)
  39. #define siz 100000
  40.  
  41. ///////////////////////////PRIME/////////////////////////////
  42. bool siv[siz];
  43. vector<ll> prime;
  44. void sieve();
  45. void pri();
  46. /////////////////////////////////////////////////////
  47. //////////////////////////Factorial//////////////////
  48. long long int fact(long long int n);
  49.  
  50.  
  51. int main(){
  52.     #ifndef ONLINE_JUDGE
  53.         clock_t tStart = clock();
  54.         freopen("in.txt", "r", stdin);
  55.         freopen("out.txt", "w", stdout);
  56.     #endif
  57.         int tc;
  58.         cin >> tc;
  59.         for(int tr = 1; tr <= tc; tr++){
  60.             printf("Case %d: ", tr);
  61.             double lr, wr;
  62.             scanf("%lf : %lf", &lr, &wr);
  63.  
  64.             double mid;
  65.             double left = 0;
  66.             double right = 400.0; //statement theke assume korlam 400 er beshi hobei na kono vabe
  67.             int limit = 1000;
  68.             int i = 0;
  69.             double w;
  70.             double l;
  71.             while(i < limit){
  72.                 mid = (left+right)/2.0; // mid ber korlam
  73.                 w = mid; //mid ta'ke width dhorlam
  74.                 l = ((lr*w)/wr); //ratio theke w diye l er man er somikoron
  75.                 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
  76.                 double ans = r*((2.0)*(asin(w/(2*r)))); //radius and chord theke arc ber korlam
  77.                 double okay = l+l+ans+ans; //length ar arch jog kore parameter ber korlam
  78.                 if(okay <= 400){ //parameter 400 er choto naki boro check korlam
  79.                     left = mid; //choto hole left barbe              
  80.                 }
  81.                 else{
  82.                     right = mid; // boro hole right kombe
  83.                 }
  84.                 i++;// loop ghuranor jonno.
  85.  
  86.             }
  87.             printf("%lf %lf\n", l, w);
  88.             // cout << l << " " << w << endl;
  89.  
  90.         }
  91.        
  92.     #ifndef ONLINE_JUDGE
  93.         printf("\n>>Time taken: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC);
  94.     #endif
  95. }
  96.  
  97.  
  98. //////////////////////////prime/////////////////////////////
  99. void sieve() {
  100.     memset(siv, true, sizeof(siv));
  101.     int root = sqrt(siz);
  102.     for(int i = 2; i<=root; i++) {
  103.         for(int j = i*2; j <= siz; j+=i) {
  104.             siv[j] = false;
  105.         }
  106.     }
  107. }
  108. void pri() {
  109.     sieve();
  110.     siv[0] = false;
  111.     siv[1] = false;
  112.     for(int i = 0; i < siz; i++) if(siv[i] == true) prime.push_back(i);
  113.     /////////////Checking whether the function is working with this print///////
  114.     // cout << prime.size() << endl;
  115. }
  116.  
  117. //////////////////////////Factorial//////////////////
  118. long long int fact(long long int n){
  119.     long long int ans = 1;
  120.     for(long long int i = 1; i <= n; i++){
  121.         ans *= i;
  122.     }
  123.     return ans;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement