三角形 容斥

2021-10-10 05:38:28 字數 1636 閱讀 8586

>link

>description

有三條線a,b

,c

a,b,c

a,b,

c,給定乙個整數l

ll,可以給a,b

,c

a,b,c

a,b,

c三條線分別加長,並且三條線總的加長量不超過l

ll,問有多少種加長方案(包括不加長)使得a,b

,c

a,b,c

a,b,

c組成合法三角形

>解題思路

考試時打了乙個o(l

3)

o(l^3)

o(l3

)暴力→50分

正解:考慮容斥,可以運用隔板法求出全部的加長方案為cl+

4−13

c_^cl

+4−1

3​(用三個板分隔成四個塊,最後一塊為捨去塊,每個塊可為空)

分類討論三條邊a,b

,c

a,b,c

a,b,

c(一下為其中一種討論,其他討論把a,b

,c

a,b,c

a,b,

c換一下即可)

我們可知非法的三角形情況為 a+x

+b+y

≤c+z

a+x+b+y≤c+z

a+x+b+

y≤c+

z簡化得 x+y

≤c+z

−a−b

x+y≤c+z-a-b

x+y≤c+

z−a−

b,由題意又得 x+y

≤l−z

x+y≤l-z

x+y≤l−

z因此 x+y

≤min

(c+z

−a−b

,l−z

)x+y≤min(c+z-a-b,l-z)

x+y≤mi

n(c+

z−a−

b,l−

z)為非法情況

所以我們可以暴力列舉z

zz,k

kk為min

(c+x

−a−b

,l−x

)min (c +x - a - b, l -x)

min(c+

x−a−

b,l−

x),減去非法方案數ck+

3−12

c_^ck

+3−1

2​>**

#include 

#include

#include

#include

#define ll long long

using namespace std;

ll a, b, c,

l, ans, cc[

300010][

10];void

getc()

}//楊輝三角預處理組合數qaq

int main()

printf

("%lld"

, ans)

;return0;

}

求大三角形中三角形個數

一道筆試程式設計題要求求乙個大三角形中所有小三角形的個數,大約是下面這種情況 首先想到是的將問題由求邊長為n的三角形個數 求邊長為n 1的三角形個數 求邊長為1的三角形個數 1,回溯求得所有三角形個數。但是再仔細一看因為有重疊三角形和倒置的三角形,所以這個方法不可行。接著找到三角形個數由三部分組成 ...

經典演算法 (三)帕斯卡三角形(楊輝三角形)

楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在1654年發現這一規律的,比楊輝要遲393年,比賈憲遲600年。簡介 楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在165...

三角形面積

算是自己第一道正式寫的演算法幾何吧,先從簡單的開始吧,加油!描述 給你三個點,表示乙個三角形的三個頂點,現你的任務是求出該三角形的面積 輸入 每行是一組測試資料,有6個整數x1,y1,x2,y2,x3,y3分別表示三個點的橫縱座標。座標值都在0到10000之間 輸入0 0 0 0 0 0表示輸入結束...