zoukankan      html  css  js  c++  java
  • CF1355C. Count Triangles

    CF1355C. Count Triangles

    题意:

    给定(A,B,C,D),求(Aleq xleq Bleq yleq C leq zleq D),有多少个(x,y,z)组成三角形。

    思路:

    这题有个很好的性质,就是因为限定了每个边的取值范围,所以(y+z)一定大于(x)(x+z)一定大于(y),所以我们只需要考虑(x+y>z)这样的情况。

    肯定不能枚举(x,y),所以换了一个思路,考虑枚举(x+y)

    那么显然对于一个(x+y=num),他能取到的(z)(min{num-C,D-C+1})那么多个。

    之后我们只需要找到(num)对于(x,y)的拆分。

    假设说,如果(num=A+B+2),那么我们的拆分就是三个:((A,B+2),(A+1,B+1),(A+2,B))

    所以可以想到思路,就是在限制条件下,(B)可以的增加范围,也就是一段区间。

    求这段区间的长度。

    很显然(B)最多可以加到(C),之后来确定下界。

    (cnt)(A)最多可以加到的数,那么(num-cnt)就是(B)可以加到的下界(因为(A)加的最多,所以(B)取到最小)。

    void solve()
    {
        ll A, B, C, D;
        cin>>A>>B>>C>>D;
        ll ans = 0;
        ll dow = max(C+1, A+B);
        for(ll i = dow; i <= B+C; i++)
        {
            ll t1 = i-A, t2 = i-B;
    
            if(t1 > C) t1 = C;
            if(t2 > B) t2 = B;
    
            t2 = i-t2;
    
            ll tt = min(i-C, D-C+1);
            ans += (t1-t2+1)*tt;
        }
        cout << ans << endl;
    }
    
  • 相关阅读:
    微信小程序解析xml
    微信小程序获取openid
    PHPExcel-1.8导出
    期末复习--实用回归分析
    一元线性回归
    链表
    WSL 配置oh-my-zsh
    Introduction to Computer Science and Programming in Python chap2
    树莓派的一些记录
    Top
  • 原文地址:https://www.cnblogs.com/zxytxdy/p/12904723.html
Copyright © 2011-2022 走看看