Problem p03871 (C++) — buggy submission, verdict: Time Limit Exceeded

#include <bits/stdc++.h>
using namespace std;
struct fast_ios {
  fast_ios() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(20);
  };
} fast_ios_;
#define FOR(i, begin, end) for (int i = (begin); i < (end); i++)
#define REP(i, n) FOR(i, 0, n)
#define IFOR(i, begin, end) for (int i = (end)-1; i >= (begin); i--)
#define IREP(i, n) IFOR(i, 0, n)
#define Sort(v) sort(v.begin(), v.end())
#define Reverse(v) reverse(v.begin(), v.end())
#define all(v) v.begin(), v.end()
#define SZ(v) ((int)v.size())
#define Lower_bound(v, x)                                                      \\
  distance(v.begin(), lower_bound(v.begin(), v.end(), x))
#define Upper_bound(v, x)                                                      \\
  distance(v.begin(), upper_bound(v.begin(), v.end(), x))
#define Max(a, b) a = max(a, b)
#define Min(a, b) a = min(a, b)
#define bit(n) (1LL << (n))
#define bit_exist(x, n) ((x >> n) & 1)
#define debug(x) cout << #x << "=" << x << endl;
#define vdebug(v)                                                              \\
  cout << #v << "=" << endl;                                                   \\
  REP(i_debug, v.size()) { cout << v[i_debug] << ","; }                        \\
  cout << endl;
#define mdebug(m)                                                              \\
  cout << #m << "=" << endl;                                                   \\
  REP(i_debug, m.size()) {                                                     \\
    REP(j_debug, m[i_debug].size()) { cout << m[i_debug][j_debug] << ","; }    \\
    cout << endl;                                                              \\
  }
#define pb push_back
#define f first
#define s second
#define int long long
#define INF 1000000000000000000
template <typename T> istream &operator>>(istream &is, vector<T> &v) {
  for (auto &x : v)
    is >> x;
  return is;
}
template <typename T> ostream &operator<<(ostream &os, vector<T> &v) {
  for (int i = 0; i < v.size(); i++) {
    cout << v[i];
    if (i != v.size() - 1)
      cout << endl;
  };
  return os;
}
template <typename T> void Out(T x) { cout << x << endl; }
template <typename T1, typename T2> void Ans(bool f, T1 y, T2 n) {
  if (f)
    Out(y);
  else
    Out(n);
}

using vec = vector<int>;
using mat = vector<vec>;
using Pii = pair<int, int>;
using PiP = pair<int, Pii>;
using PPi = pair<Pii, int>;
using bools = vector<bool>;
using pairs = vector<Pii>;

// int dx[4] = {1,0,-1,0};
// int dy[4] = {0,1,0,-1};
// char d[4] = {'D','R','U','L'};

const int mod = 1000000007;
// const int mod = 998244353;
#define Add(x, y) x = (x + (y)) % mod
#define Mult(x, y) x = (x * (y)) % mod

signed main() {

  vector<double> p(6), q(6);
  cin >> p;
  cin >> q;
  REP(i, 6) {
    p[i] /= 100.0;
    q[i] /= 100.0;
  }

  double ans = 1.0;
  double a0 = 0.0, a1 = 1.0;
  while (true) {
    double A0 = a0 + (a1 - a0) / 3, A1 = a0 + (a1 - a0) * 2 / 3;
    double val0 = 0.0, val1 = 0.0;
    REP(i, 6) {
      val0 += max(A0 * p[i], (1.0 - A0) * q[i]);
      val1 += max(A1 * p[i], (1.0 - A1) * q[i]);
    }

    if (val0 > val1)
      a0 = A0;
    else
      a1 = A1;

    if (a1 - a0 < 1.0e-11) {
      Out((val0 + val1) / 2.0);
      return 0;
    }
  }
  // Out(ans);

  return 0;
}


Error: TLE

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
struct fast_ios {
  fast_ios() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(20);
  };
} fast_ios_;
#define FOR(i, begin, end) for (int i = (begin); i < (end); i++)
#define REP(i, n) FOR(i, 0, n)
#define IFOR(i, begin, end) for (int i = (end)-1; i >= (begin); i--)
#define IREP(i, n) IFOR(i, 0, n)
#define Sort(v) sort(v.begin(), v.end())
#define Reverse(v) reverse(v.begin(), v.end())
#define all(v) v.begin(), v.end()
#define SZ(v) ((int)v.size())
#define Lower_bound(v, x)                                                      \\
  distance(v.begin(), lower_bound(v.begin(), v.end(), x))
#define Upper_bound(v, x)                                                      \\
  distance(v.begin(), upper_bound(v.begin(), v.end(), x))
#define Max(a, b) a = max(a, b)
#define Min(a, b) a = min(a, b)
#define bit(n) (1LL << (n))
#define bit_exist(x, n) ((x >> n) & 1)
#define debug(x) cout << #x << "=" << x << endl;
#define vdebug(v)                                                              \\
  cout << #v << "=" << endl;                                                   \\
  REP(i_debug, v.size()) { cout << v[i_debug] << ","; }                        \\
  cout << endl;
#define mdebug(m)                                                              \\
  cout << #m << "=" << endl;                                                   \\
  REP(i_debug, m.size()) {                                                     \\
    REP(j_debug, m[i_debug].size()) { cout << m[i_debug][j_debug] << ","; }    \\
    cout << endl;                                                              \\
  }
#define pb push_back
#define f first
#define s second
#define int long long
#define INF 1000000000000000000
template <typename T> istream &operator>>(istream &is, vector<T> &v) {
  for (auto &x : v)
    is >> x;
  return is;
}
template <typename T> ostream &operator<<(ostream &os, vector<T> &v) {
  for (int i = 0; i < v.size(); i++) {
    cout << v[i];
    if (i != v.size() - 1)
      cout << endl;
  };
  return os;
}
template <typename T> void Out(T x) { cout << x << endl; }
template <typename T1, typename T2> void Ans(bool f, T1 y, T2 n) {
  if (f)
    Out(y);
  else
    Out(n);
}

using vec = vector<int>;
using mat = vector<vec>;
using Pii = pair<int, int>;
using PiP = pair<int, Pii>;
using PPi = pair<Pii, int>;
using bools = vector<bool>;
using pairs = vector<Pii>;

// int dx[4] = {1,0,-1,0};
// int dy[4] = {0,1,0,-1};
// char d[4] = {'D','R','U','L'};

const int mod = 1000000007;
// const int mod = 998244353;
#define Add(x, y) x = (x + (y)) % mod
#define Mult(x, y) x = (x * (y)) % mod

signed main() {

  vector<double> p(6), q(6);
  cin >> p;
  cin >> q;
  REP(i, 6) {
    p[i] /= 100.0;
    q[i] /= 100.0;
  }

  double ans = 1.0;
  // REP(i, 6) ans += max(p[i], q[i]) * 0.5;
  for (double a = 0.3; a <= 0.7; a += 1.0e-9) {
    double tmp = 0.0;
    double b = 1.0 - a;
    REP(i, 6) tmp += max(a * p[i], b * q[i]);
    Min(ans, tmp);
  }
  Out(ans);

  return 0;
}