Advertisement
frp

Triangles

frp
Aug 17th, 2011
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. #include <fstream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <iomanip>
  6. using namespace std;
  7. typedef long long ll;
  8. vector<ll> l;
  9. ll k, k2;
  10. ll s(ll c)
  11. {
  12.     return k + k2 * c*c - c*c*c*c;
  13. }
  14. bool isLeft(int i)
  15. {
  16.     return i + 1 < l.size() ? (s(l[i]) <= s(l[i + 1])) : (s(l[i]) >= s(l[i - 1]));
  17. }
  18. int main()
  19. {
  20.     ifstream in("input.txt");
  21.     int n; in >> n;
  22.     l.resize(n);
  23.     for(int i = 0; i < n; i++) in >> l[i];
  24.     in.close();
  25.     sort(l.begin(), l.end());
  26.     long long max_s = -1000000000;
  27.     for(int i = 0; i < n - 2; i++)
  28.         for(int j = i + 1; j < n - 1; j++)
  29.         {
  30.             ll a = l[i];
  31.             ll b = l[j];
  32.             k = -b*b*b*b + 2*a*a*b*b - a*a*a*a;
  33.             k2 = 2*a*a + 2*b*b;
  34.             int l_r = j + 1, r_r = n - 1;
  35.             while(l_r != r_r)
  36.             {
  37.                 if(r_r - 1 == l_r)
  38.                     if(s(l[l_r]) > s(l[r_r]))
  39.                         r_r = l_r;
  40.                     else l_r = r_r;
  41.                 else
  42.                 {
  43.                     int m = (l_r + r_r) / 2;
  44.                     if(isLeft(m)) l_r = m;
  45.                     else r_r = m;
  46.                 }
  47.             }
  48.             max_s = max(max_s, s(l[l_r]));
  49.         }
  50.     ofstream out("output.txt");
  51.     if(max_s < 0) out << "Triangle not found\n";
  52.     else out << fixed << setprecision(3) << sqrt(((long double)max_s) / 16.0) << "\n";
  53.     out.close();
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement