組合數學 int128

2022-06-08 18:27:12 字數 1468 閱讀 9411

今天是tabris和mengxiang000來到幼兒園的第3天,mengxiang000接到了乙個布置會場的任務。

他需要將貴賓觀眾席的椅子排成一排,一共需要n個。

幼兒園只有兩種椅子,所以他也只能使用兩種椅子。(a型別和b型別)並且假設每種椅子的數量都是無限的。

而其如果想要擺置乙個b型別的椅子,對應就需要必須有連續兩個一起布置。換句話說,就是如果出現了b型別的椅子,其必須且只有兩個連著b型別的椅子。

mengxiang000突然想知道對應n個椅子排成一列,他能夠有多少種布置的方式.

本題包含多組輸入第一行輸入乙個整數t,表示測試資料的組數

每組測試資料報含一行,輸入乙個整數n,表示一共需要擺放的椅子數量

t<=30

1<=n<=30

每組測試資料輸出包含一行,表示一共有多少種布置的方式。
示例1

複製

2

24

複製

2

5

第乙個樣例,aa,bb兩種方案。

第二個樣例,aaaa,bbbb,aabb,abba,bbaa五種方案 對於abbb 因為有連續3個b型別椅子所以不可行

這個題就是30的階乘會爆ll ,所以可以用__int128

還有乙個知識點就是如果有a個a,b個b,所以答案就是[(a+b)!]/[(a!)*(b!)]

#include#include

using

namespace

std;

typedef

long

long

ll;const

int maxn=1e3+100

;void

out(__int128 x)

if (x >= 10) out(x / 10

); putchar(x % 10 +'0'

);}void read(__int128 &x)

x = ch-'0'

;

while ((ch = getchar()) >= '

0' && ch <= '9'

) x *=flag;

}int

main()

__int128 a=n-2*i;//

a __int128 res1=1

; __int128 res2=1

;

for(__int128 j=(a+i);j>=(a+1);j--)

for(__int128 j=1;j<=i;j++)

ans+=(__int128)(res1/res2);

}out(ans);

printf("\n

");}

}

組合數(思維題 int128)

題意很簡單吧 就是算c n,k 和1e18的大小 如果你手寫一下就可以把c n,m 寫成 可以很明顯發現分子最左邊的n k可定小於分母最後邊的n k 1 所以他們能相同約分 然後就有乙個new知識點了!int128這個是只能在計算時使用的資料型別,不能在輸入輸出的時候使用 所以這道題我就可以這樣想 ...

int128 學習筆記

今天學習到 int128 型別 這是乙個處理大數的很奇妙的方法。正常來說,unsigned long long 已經是可以定義的最大的型別了,但是如果資料範圍超過了2 64 就會 如果要處理比其大一點又不是那麼大的數,就可以使用 int128這個定義。注意 int128 並不是所有編譯器都可以使用。...

直線 int128的使用

題目 平面上存在n 1e15 條直線。請問n條直線在平面上最多存在多少交點。解法 分析可知資料範圍會爆64位但又在128位以內,使用 int128。int128有定義但沒有輸入輸出等操作,需要手寫。include include include include include include inc...