25届小登,没看到老登的题解,遂有此文-__-
A题签到题,对大部分老登来说,轻松AC,但对新手来说,还是有些难度的,cf上的题解也是一笔带过,所以才写这一篇详解,造福小小登们:)
先上AC代码
using namespace std;
#define endl '\n'
long long t;
void solve()
{
long long n,a,b;
long long ans=0;
cin>>n>>a>>b;
if(b==0)
{
ans=max(a *n,n);
cout<<ans<<endl;
return;
}
long long x=((n*b+a-1)+b-1)/(2*b);//向上取整
x=min(x,n);
cout<<x*a+(1+b*x)*(n-x)<<endl;
}
int main()
{
cin >> t;
while(t--)
{
solve();
}
}
首先先对总攻击力列式,很容易得到攻击力为
其中
消去可得关于
的一元二次方程,易知其存在最大解\
坑点解析
(1)和
可取0,需要特判,见代码的12,18行
(2)在处理非整数解时,会在分子上加上分母的一半减一,比如17行分子中的
蒟蒻实力浅薄,轻喷(゚∀゚)