【CF-1355 BCount Triangles】枚举

Count Triangles

题意

给出\(A,B,C,D\),保证\(A\leq B\leq C \leq D\),

有多少个三角形,三条边的长度满足\(A\leq x \leq B \leq y \leq C \leq z\leq D\)

思路

之前有一次比赛是随便输出一个满足的三角形,这次直接问个数了。

三角形两边之和大于第三边。

我们枚举\(x+y\)的和,对于每一个和,分别算出\(z\)的取值个数和\((x,y)\)的取值个数

乘起来,求和。

代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#define pb push_back
typedef long long ll;
using namespace std;
const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;
const int N = 2e5+10;

int arr[N];
int main()
{
    int a,b,c,d;
    scanf("%d%d%d%d",&a,&b,&c,&d);
    ll ans=0;
    for(int i=a+b;i<=b+c;i++)
    {
        int r=min(d-c+1,max(0,i-c));
        int l=min(b-a,i-a-b)-max(0,i-a-c)+1;
        ans+=1LL*l*r;
    }
    printf("%lld\n",ans);
    return 0;
}
posted @ 2020-05-19 21:16  Valk3  阅读(104)  评论(0编辑  收藏  举报