[CF1303B] National Project - 数学

Solution

  • \(2a>n\),一次性结束,直接输出 \(n\)
  • \(a \geq b\),那么一直修即可,直接输出 \(n\)
  • 否则,\(a\) 占弱势,我们考虑用 \(a\) 修一半需要的完整轮次数为 \([(n-1)/2a]\) ,那么这些轮中, \(a\) 修掉的个数为 \([n/2a]a\),而 \(b\) 修掉的个数则是 \([n/2], [n/2a]b\) 中的较小值。计算剩余量然后暴力修即可。

#include <bits/stdc++.h>
using namespace std;

#define int long long

int n,a,b;


signed main() {
    int t;
    cin>>t;
    while(t--) {
        cin>>n>>a>>b;
        if(2*a>n || a>=b) {
            cout<<n<<endl;
        }
        else {
            int d=(n-1)/(2*a);
            int xa=d*a;
            int xb=min(n/2,d*b);
            int r=n-xa-xb;
            //cout<<d<<" "<<xa<<" "<<" "<<xb<<" "<<r<<endl;
            cout<<d*(a+b)+r<<endl;
        }
    }
}

相关文章:

  • 2021-10-02
  • 2022-12-23
  • 2021-12-27
  • 2021-10-27
  • 2021-11-27
  • 2021-07-02
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-11
  • 2021-08-25
  • 2022-12-23
  • 2022-12-23
  • 2022-02-03
  • 2022-03-04
  • 2022-12-23
相关资源
相似解决方案