C. Count Triangles

原题链接

题解

我们知道,三角形成立的条件是任意两边之和都要大于第三边,因为这里已经明确了三条边的大小关系,即 xyz

所以,该三角形成立的条件是 x+y>z
看到 5e5 我们不难想到遍历其中某条边的长度
这里我遍历的是 y
遍历 y,找到最小的 x 使得至少存在一个 z 使得三角形合法
然后 x 每加一,合法的 z 个数就加一,所以我们预处理每加一个 x ,合法的 z 的总数

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;

ll pmt[500045]={0};
void solve()
{
    ll a,b,c,d;
    cin>>a>>b>>c>>d;
    ll len=d-c+1;
    for(ll i=1;i<=5e5+2;i++)
    {
        pmt[i]=pmt[i-1]+min(i,len);
    }

    ll ans=0;

    for(ll i=b;i<=c;i++)
    {
        ll pos=c+1LL-i;
        if(pos<=b)
        {
            if(pos>=a) ans+=pmt[b-pos+1];
            else ans+=pmt[b-pos+1]-pmt[a-pos];
        }
    }

    cout<<ans;
}
int main()
{

    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}


posted @   纯粹的  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示