v 0. Pasted by UnderFelixAbove as cpp at 2010-05-18 21:57:23 MSK and set expiration to never.

Paste will expire never.

  1. // Меньшиков. Тренировка 3.
  2. // 3D. Открытка и конверт [postcard]
  3. // ibelyaev: 02Mar2010
  4.  
  5. #include <iostream>
  6. #include <cmath>
  7.  
  8. using namespace std;
  9.  
  10. double pi = 2*acos(0.0);
  11. int h,w,H,W;
  12. void input()
  13. {
  14.     cin>>h>>w;
  15.     cin>>H>>W;
  16. }
  17. double Fabs(double a)
  18. {
  19.     if (a<0)
  20.         return -a;
  21.     return a;
  22. }
  23. double eps = 1e-9;
  24. bool Equal(double a, double b)
  25. {
  26.     return Fabs(a-b) <= eps;
  27. }
  28. bool LessEqual(double a, double b)
  29. {
  30.     return a<b || Equal(a,b);
  31. }
  32. bool isInside(int w, int h, int W, int H)
  33. {
  34.     if (h>w) swap(h,w);
  35.     if (H>W) swap(H,W);
  36.     // тривиальный случай
  37.     if (h<=H && w<=W)
  38.         return true;
  39.     else // Под углом
  40.     {
  41.         double beta = acos((double)H / sqrt((double)(h*h + w*w)));
  42.         double phi  = acos((double)W / sqrt((double)(h*h + w*w)));
  43.  
  44.         double alpha = 2* atan((double)h/(double)w);
  45.         double Alpha = pi/2 - beta - phi;
  46.         return LessEqual(alpha,Alpha);
  47.     }
  48. }
  49. void solve()
  50. {
  51.     if (isInside(w,h,W,H))
  52.         cout<<"Possible";
  53.     else
  54.         cout<<"Impossible";
  55. }
  56. int main()
  57. {
  58.     input();
  59.     solve();
  60.     return 0;
  61. }


Editing is locked.