CodeForces571A. Lengthening Sticks(组合数学-容斥)
题目大意:
a,b,c三根木棍可以增加三个不同的数字,aa,bb,cc,且aa+bb+cc<=L,问能构成三角形的木棒有多少种方案
题目思路:
如果我们直接考虑把L分配给aa,bb,cc好像不好下手
所以逆向考虑
合法的情况 = 所有情况 - 不合法的情况
step1:
首先计算所有的情况
假设L当时为l
我们把长度为l分配去的总的方案
这个问题我们等效为:有三个篮子,每个篮子放至少一个个物品,总共l个物品,问有多少种方案
我们用插板法解决这个问题
因为每个篮子放至少一个,而我们的目标是可以放0个,怎么办呢?
我们可以增加几个物品使初始每个篮子中就有一个,这里假设有m个篮子,n个物品
那我们的物品个数变为n+m,这时候会产生n+m-1个隔板
然后我们要选出m部分来,也就是放m-1个隔板
此时的方案为C(n+m-1,m-1)
回到这个题目
此时长度为l时,方案为C(l+3-1,3-1)
然后我们枚举一遍l,求和算出总的方案
所以得到为l的时候方案为C(l+2,2)
step2:
求不合法的方案==
假设a+aa,b+bb,c+cc(aa,bb,cc分别为分配的增加的长度)
假设a+aa是那条最长的边
此时不合法需要满足如下条件:
b+bb+c+cc<=a+aa
bb+cc<=l-aa
得
bb+cc<=min(l-aa,a-b-c+aa)
令T=bb+cc
这个时候再进行一下问题转化
有T个物品,分配到三个篮子里(可以分配0个)
三个篮子分别是bb,cc和多余的部分
回到上面的插板法一样的解法C(t+3-1.3-1)
然后用总的减去不合法就ok了
CODE:

ll b,c,a,l;
int main() {
a=read(),b=read(),c=read(),l=read();
ll zong = (l+1)*(l+2)*(l+3)/6ll;
ll no;
for(int aa=0 ; aa<=l ; aa++) {
ll t = min(l-aa,a-b-c+aa);
if(t<0) continue;
no = (t+2)*(t+1)/2ll;
zong-=no;
}
for(int bb=0 ; bb<=l ; bb++) {
ll t = min(l-bb,b-a-c+bb);
if(t<0) continue;
no = (t+2)*(t+1)/2ll;
zong-=no;
}
for(int cc=0 ; cc<=l ; cc++) {
ll t = min(l-cc,c-b-a+cc);
if(t<0) continue;
no = (t+2)*(t+1)/2ll;
zong-=no;
}
out(zong);
return 0;
}
CodeForces571A. Lengthening Sticks(组合数学-容斥)的更多相关文章
- CF 317 A. Lengthening Sticks(容斥+组合数学)
传送门:点我 A. Lengthening Sticks time limit per test 1 second You are given three sticks with po ...
- HDU 6397 Character Encoding (组合数学 + 容斥)
题意: 析:首先很容易可以看出来使用FFT是能够做的,但是时间上一定会TLE的,可以使用公式化简,最后能够化简到最简单的模式. 其实考虑使用组合数学,如果这个 xi 没有限制,那么就是求 x1 + x ...
- [CSP-S模拟测试]:多维网格(组合数学+容斥)
题目传送门(内部题138) 输入格式 输入数据第一行为两个整数$d,n$. 第二行$d$个非负整数$a_1,a_2,...,a_d$. 接下来$n$行,每行$d$个整数,表示一个坏点的坐标.数 ...
- [BZOJ2839]:集合计数(组合数学+容斥)
题目传送门 题目描述 .(是质数喔~) 输入格式 一行两个整数N,K. 输出格式 一行为答案. 样例 样例输入: 3 2 样例输出: 样例说明 假设原集合为{A,B,C} 则满足条件的方案为:{AB, ...
- 【XSY2990】树 组合数学 容斥
题目描述 同 Comb Avoiding Trees 不过只用求一项. \(n,k\leq {10}^7\) 题解 不难发现一棵 \(n\) 个叶子的树唯一对应了一个长度为 \(2n-2\) 的括号序 ...
- 2019.02.11 bzoj4767: 两双手(组合数学+容斥dp)
传送门 题意简述:你要从(0,0)(0,0)(0,0)走到(ex,ey)(ex,ey)(ex,ey),每次可以从(x,y)(x,y)(x,y)走到(x+ax,y+ay)(x+ax,y+ay)(x+ax ...
- BZOJ4710: [Jsoi2011]分特产【组合数学+容斥】
Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望 ...
- HDU 6397 组合数学+容斥 母函数
Character Encoding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Oth ...
- codeforces 571A--Lengthening Sticks(组合+容斥)
A. Lengthening Sticks time limit per test 1 second memory limit per test 256 megabytes input standar ...
随机推荐
- js & while & do while
js & while & do while https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Stat ...
- parcel bug & not support normal import React & ReactDOM module
bug report not support normal import React & ReactDOM module, why Code Sample OK import * as Rea ...
- django学习-9.windows系统安装mysql8教程
1.前言 mysql是最流行的关系型数据库管理系统之一,我们可以在本地windows环境下搭建一个mysql的环境,便于学习. 当前我采取的搭配是: windows7(window8和window10 ...
- ROS等下载时无法连接问题的解决方法
资料参考: https://blog.csdn.net/weixin_44692299/article/details/105869229
- C++算法代码——骨牌铺法
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1638 题目描述 输入 输入一个正整数,表示n. 输出 输出一个正整数,表示铺法. 样 ...
- 主键策略+mybayisPlus自动增长
主键策略: 1.自动增长 有一点小缺陷:例如当一张表里的数据过于庞大时我们会进行分表操作,若是用自动增长策略,那么除了第一张表外的每一张表都必须知道上一张的表的的最后ID值.这个操作便会造成效率的变低 ...
- Django中文文档-模型Models(二):Meta选项、模型属性、模型方法
元数据(Meta)选项 使用内部的class Meta 定义模型的元数据,例如: from django.db import models class Ox(models.Model): horn_l ...
- wxWidgets源码分析(3) - 消息映射表
目录 消息映射表 静态消息映射表 静态消息映射表处理过程 动态消息映射表 动态消息映射表处理过程 消息映射表 消息是GUI程序的核心,所有的操作行为均通过消息传递. 静态消息映射表 使用静态Event ...
- js 浮点运算bug
js几个浮点运算的bug,比如6.9-1.1,7*0.8,2.1/0.3,2.2+2.1 实现思路 通过将浮点数放大倍数到整型(最后再除以相应倍数),再进行运算操作,这样就能得到正确的结果了 比如:1 ...
- SnowNLP——获取关键词(keywords(1))
一.SnowNLP的获取文本关键词 前面介绍了SnowNLP的获取关键词的方法,这里再重现一下 1 from snownlp import SnowNLP 2 # 提取文本关键词,总结3个关键词 3 ...