題目鏈接:Codeforces - Lengthening Sticks
正難則反。我們直接計算不合法的方案。
總方案我們可以看成是一個可以放0 的隔板法。 C(x+2,2)
然後不合法的,我們直接看a>=b+c,b>=a+c,c>=a+b分別計算即可。
AC代碼:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,c,l,res;
inline int solve(int a,int b,int c,int x){
int y=max(0LL,(b+c+x-a+1)/2);
if(x<y) return 0;
return (x-y+1)*(x-y+2)/2;
}
signed main(){
cin>>a>>b>>c>>l;
for(int i=0;i<=l;i++){
res+=(i+2LL)*(i+1)/2;
res-=solve(a,b,c,i)+solve(b,a,c,i)+solve(c,a,b,i);
}
cout<<res;
return 0;
}