51nod 1509 加长棒 (隔板)
来源:互联网 发布:手机自动切换移动网络 编辑:程序博客网 时间:2024/06/10 03:36
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
思路:属于L个单位 分为四部分(给a,给b,给 c,剩余),每部分可以为空的情况, 那么 一共有L+3个空位,如果不考虑三角形,公用C(l+3,3) 种情况, 之后去重:
去重的条件是 满足长度限定且不是三角形
x+y+z<=l
a+x+b+y<=c+z
x+y<=min(l-z,c+z-a-b);
那么枚举z的大小可以确定x+y <= k
将这个k再分给x,y 同上, 共有k+2个空位,C(k+2,2)
#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#include <iostream>using namespace std;typedef long long ll;ll solve(ll a,ll b,ll c,ll l){ ll ans=0; for(int i=0;i<=l;i++){ ll tmp=min(l-i,c+i-a-b); if(tmp>=0) ans+=(tmp+1)*(tmp+2)/2; }return ans;}int main(){ ll a,b,c,l; cin>>a>>b>>c>>l; ll ans=(l+3)*(l+2)*(l+1)/6; ans-=solve(a,b,c,l); ans-=solve(a,c,b,l); ans-=solve(b,c,a,l); cout<<ans<<endl;}
阅读全文
0 0
- 51nod 1509 加长棒 (隔板)
- 51nod 1509 加长棒 组合数学(隔板法)
- 51nod 1509 加长棒(隔板法)
- 51Nod-1509-加长棒
- 51nod 1509 加长棒 插板法
- 51nod-1509 加长棒(组合数学+挡板法)
- 51NOD 1509 加长棒 && Codeforces 571 A. Lengthening Sticks(组合数学 + 挡板法)
- 51node 1509 加长棒|codeforces571A(组合数)
- 1509 加长棒
- 加长棒
- HDU 4704 Sum(隔板+费马小定理)
- HDU4704:Sum(费马小定理 & 隔板法)
- [UVa 10943] How do you add? (计数+隔板法+重叠隔板)
- □ 影片名:《JJ加长手术》(40217) 在线播放
- 建一支强大的小团队(加长版) by 陈皓
- (51nod)1001
- (51nod)1002
- (51nod)1003
- 那些年我阅读的著名源码中的BUG
- js 获取上传图片的绝对路径
- OkHttp框架
- win10 激活命令
- Android 谈谈自动化测试
- 51nod 1509 加长棒 (隔板)
- python -- 构建表的字典
- React Native Mac配置安卓环境
- MyBatis的include使用
- Tablayout
- JAVA使用JDK开发WebService
- 求元音字母
- JAVA面向对象练习07(灯泡发亮)
- docker swarm 入门笔记