原題鏈結
1509 加長棒
codeforces
基準時間限制:1 秒 空間限制:131072 kb 分值: 40
難度:4級演算法題
現在有三根木棒,他們的長度分別是a,b,c厘公尺。你可以對他們進行加長(不同的木棒可以增加不同的長度),他們總的加長長度不能超過l厘公尺。你也可以不對他們進行加長。
現在請你計算一下有多少種加長的方式使得他們能構成合法的三角形(面積非0)。
input
單組測試資料。output共一行,包含4 個整數a,b,c,l (1≤a,b,c≤3*10^5, 0≤l≤3*10^5)。
輸出答案佔一行。input示例
1 1 1 2output示例
4某大牛思路:
解題思路:
這個題目直接想的話 沒法做,所以就是間接的想,也就是採用容斥原理從反面來想,也就是說 用總數減去不能夠滿足三角形的方法數,那麼先來
求總數,因為現在的問題是將
l 分成四份, 乙份給
a 乙份給
b 乙份給
c 剩下的就是剩下的了,那麼分成的四份可能有
0 , 不滿足
擋板法的條件,所以我們就將 l+
4 ,那麼現在在分成四份就符合條件啦,所以總的方法數就是 c(
l+4−
1,4−
1), 那麼現在再來求不滿足
三角形條件的方法數,因為三角形一定滿足乙個條件是 兩邊
之和大於
第三邊 所以我們只要求出 兩條較小的邊小於等於最大邊就不滿足條件了,
然後根據這個可以列乙個方程,假設
a 現在加上了
x ,
b 現在加上了
y ,
c 現在加上了
z (假設 a 是最大邊),方程如下:b+
y+c+
z≤a+
x 然後因為所有數的和一定是 a+
b+c+
l ,所以最大值不可能超過 a+
b+c+
l ,那麼 b+
c≤a+
b+c+
l−(a
+x) 綜上 所以有 b+
c≤mi
n(a+
b+c+
l−a,
a+x)
然後在利用擋板法求出 不能組成三角形的方法數,是 c(
min−
b−c+
2,2)
所以就可以寫了。
#include #include #include #include #include #include #define maxn 1000005
#define inf 1000000009
typedef long long ll;
using namespace std;
ll solve(ll a, ll b, ll c, ll m)
return k;
}int main()
51Nod 1509 加長棒(隔板法 容斥)
思路 正面想似乎不大好想,本著正難則反的原則。我是看的題解 我們想組不成三角形的方案,然後用總的方案 不能組成的方案。總的方案數就是 使得 x y z l x y z l x y z l 的方案,這顯然可以用隔板法求,三個邊 相當於三個盒子,然後有l ll個球可以放到裡面,因為這裡是小於等於l ll...
51nod 瞬間移動 組合數學
1627 瞬間移動 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 收藏 關注 有乙個無限大的矩形,初始時你在左上角 即第一行第一列 每次你都可以選擇乙個右下方格仔,並瞬移過去 如從下圖中的紅色格仔能直接瞬移到藍色格仔 求到第n行第m列的格仔有幾種方案,答案對10...
51nod 1627 瞬間移動 組合數
有乙個無限大的矩形,初始時你在左上角 即第一行第一列 每次你都可以選擇乙個右下方格仔,並瞬移過去 如從下圖中的紅色格仔能直接瞬移到藍色格仔 求到第n行第m列的格仔有幾種方案,答案對1000000007取模。單組測試資料。兩個整數n,m 2 n,m 100000 output 乙個整數表示答案。inp...