Problem
n个士兵分m组,每回合造成当前剩余人数点伤害,没回合选人数最多的组杀k个人,问最多能造成多少伤害。
Solution
枚举杀多少次k个人,剩下的人平分在m组总伤害最大。
Code
#include <iostream>
#include <cstdio>
using namespace std;
long long n,m,k,ct,ans,mx;
long long solve()
{
ans = 0;
long long x=(n-ct)/k;
ans+=(2*n-k*(x-1))*x/2;
long long ans1=ct%m,ans2=m-ans1;
ans+=(ct*2-(ct/m+1)*(ans1-1))*ans1/2;
ans+=(ct/m+ct/m*ans2)*ans2/2;
return ans;
}
int main()
{
cin>>n>>m>>k;
if(n<=m)
{
cout<<n+n*(n-1)/2;
return 0;
}
for(int i=max(n/k-m,(long long)0);i<=n/k;i++)
{
ct=n-i*k;
mx=max(mx,solve());
}
cout<<mx;
return 0;
}