2 条题解

  • 1
    @ 2024-11-18 13:54:33
    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    int n, x, v, sum, ans, res1, res2, res3, a[100005];
    signed main()
    {
      std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
      cin >> n;
      for (int i = 1; i <= n; i++)
      {
        cin >> a[i], sum += a[i];
        if (a[i] > a[res1])
          res3 = res2, res2 = res1, res1 = i;
        else if (a[i] > a[res2])
          res3 = res2, res2 = i;
        else if (a[i] > a[res3])
          res3 = i;
      }
      swap(a[1], a[res1]), swap(a[2], a[res2]), swap(a[3], a[res3]);
      if (a[1] * 2 > sum - a[1])
      	cout << -1, exit(0);
      for (int i = 1; i <= n; i++)
        if (a[i] & 1)
          x++, a[i]--, sum--;
      if ((sum - a[1]) / 2 >= a[1])
      {
      	v = sum / 6;
    	x += sum - v * 6;
      }
      else if (sum - a[1] - a[2] >= a[2])
      {
      	a[2] = a[3] = (sum - a[1]) / 2;
      	if (a[2] & 1)
          x += 2, a[2]--, a[3]--;
        x += a[1] - a[2];
        v = a[2] / 2;
      }
      else
      {
      	a[3] = sum - a[1] - a[2];
      	v = a[3] / 2;
      	x += a[1] + a[2] - 2 * a[3];
      }
      cout << min(v, v - (int)ceil((3 * v - x) / 9.0));
      exit(0);
    }
    

    代码如上,最优解

    信息

    ID
    28
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    127
    已通过
    13
    上传者