zoukankan      html  css  js  c++  java
  • 51 Nod 1509 加长棒(巧妙的隔板法计数)

    1509 加长棒 

    题目来源: CodeForces

    基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题

     收藏

     关注

    现在有三根木棒,他们的长度分别是a,b,c厘米。你可以对他们进行加长(不同的木棒可以增加不同的长度),他们总的加长长度不能超过L厘米。你也可以不对他们进行加长。

    现在请你计算一下有多少种加长的方式使得他们能构成合法的三角形(面积非0)。

    Input

    单组测试数据。
    共一行,包含4 个整数a,b,c,L (1≤a,b,c≤3*10^5, 0≤L≤3*10^5)。

    Output

    输出答案占一行。

    Input示例

    1 1 1 2

    Output示例

    4

    参考了这位大神代码:

    https://www.cnblogs.com/zyb993963526/p/6718933.html

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    #include<vector>
    #include<queue>
    #include<cmath>
    using namespace std;

    typedef long long LL;

    LL a,b,c,l;

    LL solve(LL a,LL b, LL c, LL l)  //设c为最大边
    {
        LL cnt=0;
        for(int z=0;z<=l;z++)
        {
            LL x=min(c+z-a-b,l-z);
            if(x>=0)  cnt+=(x+1)*(x+2)/2;
        }
        return cnt;
    }

    int main()
    {
        //freopen("D:\input.txt","r",stdin);
        while(~scanf("%lld%lld%lld%lld",&a,&b,&c,&l))
        {
            LL ans=(l+1)*(l+2)*(l+3)/6;
            ans-=solve(a,b,c,l);
            ans-=solve(a,c,b,l);
            ans-=solve(b,c,a,l);
            printf("%lld ",ans);
        }
    }

  • 相关阅读:
    Android 新建项目报错(CANNOT RESOLVE SYMBOL R)
    GIT相关
    Java 语言基础
    StarUML
    public static void main(String[] args)的理解
    软件安装以及环境搭配
    基础
    字符串的格式化
    python里的正则表达式
    集合
  • 原文地址:https://www.cnblogs.com/linruier/p/9865348.html
Copyright © 2011-2022 走看看