Codeforces - Lengthening Sticks

題目鏈接: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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章