C. Count Triangles(组合数学)

C. Count Triangles(组合数学)

传送门

思路:考虑所有的组成的可行解。

显然组成三角形, 因为,所以.

又因为.所以具有可行解的最小值为.

最大值即.

所以

接下来考虑每种对答案的贡献,首先考虑对于当前,的取值。

显然只能取.又因为.所以

可选的个数为.

接下来考虑可选的个数.

根据乘法原理可得当前的贡献为:
综上可以通过遍历得到答案。

时间复杂度:

AC代码:

#include<iostream>
#include<algorithm>
typedef long long ll; 
using namespace std;
signed main(){
    ll a,b,c,d;
    cin>>a>>b>>c>>d;
    ll ans=0;
    for(ll i=max(c+1,a+b);i<=b+c;++i)
        ans+=(min(d+1,i)-c)*(min(i-b,b)-max(i-c,a)+1);
    cout<<ans<<endl;
}
全部评论

相关推荐

牛客51274894...:照片认真的吗,找个专门拍证件照的几十块钱整端正点吧,要不就别加照片
点赞 评论 收藏
分享
02-25 19:38
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务