Release como una fórmula
para hacer un intervalo máximo que tiene 1, utiliza la inclusión y la exclusión
como se supone como un
número es n * (n-1) / 2
menos el número rango de 0 a
la cantidad total de la máxima para hacer la
necesaria 0 de manera que el número del intervalo mínimo
utiliza para dividir un total de m + 1 de la sección
idéntica como sea posible de modo que cada número de intervalo 0
código:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ll t,n,m;
cin>>t;
while(t--)
{
cin>>n>>m;
if(m==0)
{cout<<"0"<<endl;
continue;}
if(n==1)
{cout<<"1"<<endl;
continue;}
ll ans=n*(n-1)/2;
ans+=m;
////////////////////////////////////////////
ll c0=n-m;//c0为0的个数
ll op=m+1;//op为由1划分的区块数
if(c0%op==0)
{
ll kk=c0/op;
ans-=op*kk*(kk-1)/2;
cout<<ans<<endl;
}
else
{
ll kk=c0/op;
ll mod=c0%op;
ll aa=mod*(kk+1)*(kk)/2;
ll bb=(op-mod)*kk*(kk-1)/2;
ans-=(aa+bb);
cout<<ans<<endl;
}
}
return 0;
}