1 条题解

  • 0
    @ 2025-9-10 8:58:59

    C++ :

    #include <stdio.h>
    
    #include <algorithm>
    #include <iostream>
    
    typedef long long llong;
    
    llong div(llong a, llong b)
    {
      return (a + b-1) / b;
    }
    
    void maxlis(llong &x, llong a)
    {
      x = std::max(x, a);
    }
    
    llong a, b, x, y, m;
    
    llong max_hurt(llong k)
    {
      llong h = x * k;
      if (k == 1)
        return h;
      maxlis(h, (k-1) * x + a + b * (k-1));
      llong z = (a+b) + x * y;
      llong zcnt = k / (y+1);
      if (k % (y+1) == 0) {
        maxlis(h, z * (zcnt - 1) + y * x + a + y * b);
      }
      else if (k % (y+1) == 1) {
        maxlis(h, z * (zcnt - 1) + (y+1) * x + a + (y+1) * b);
      }
      else if (k % (y+1) == 2) {
        maxlis(h, z * zcnt + x + a + b);
      }
      else {
        llong r = k % (y+1);
        maxlis(h, z * zcnt + (r-1) * x + a + b * (r-1));
      }
      return h;
    }
    
    int main()
    {
      //freopen("../data/E.in", "r", stdin);
      //freopen("../data/tmpE.out", "w", stdout);
      int casc;
      scanf("%d", &casc);
      for (int casi =1 ; casi <= casc; ++casi) {
        //scanf("%I64d %I64d %I64d %I64d %I64d", &a, &b, &x, &y, &m);
        std::cin >> a >> b >> x >> y >> m;
        llong l = 0;
        llong r = m;
        // [r, l)
        //std::cout << max_hurt(32LL) << "\n";
        for (; r-l > 1; ) {
          llong mid = (l+r) >> 1;
          llong now = max_hurt(mid);
          if (now >= m)
            r = mid;
          else l = mid;
        }
        //printf("%I64d\n", r);
        std::cout << r << std::endl;
      }
      return 0;
    }
    
    
    • 1

    信息

    ID
    3506
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者