HDU4609 3 idiots 生成函式

2022-04-29 20:42:13 字數 1438 閱讀 4483

鏈結

這個題就很休閒了。。

首先這是個數數題,我們要求的是\(\frac}\)

其中\(a\)按從小到大排序, \(i < j < k\)。

因為\(a_i \leqslant 10^5\),那麼可以直接暴力生成函式卷積。

但是如果直接算合法的方案的話會出現一點問題。我們在算的時候維護了乙個字尾和表示乘起來大於等於這個數的方案。我們要求的方案需要滿足\(i < j < k\),但是這樣計算可能會出現不合法的情況。

那麼可以算不合法的方案維護字首和,這樣就不會出現上面的情況了

#include#define pair pair#define mp(x, y) make_pair(x, y)

#define fi first

#define se second

#define ll long long

#define ull unsigned long long

#define fin(x)

#define fout(x)

using namespace std;

const int maxn = 1e6 + 10, inf = 1e9 + 1;

const double eps = 1e-9, pi = acos(-1);

inline int read()

while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();

return x * f;

}namespace poly

template inline void add2(a &x, b y)

template inline ll mul(a x, b y)

template inline void mul2(a &x, b y)

template inline bool chmax(a &x, b y)

template inline bool chmin(a &x, b y)

int fp(int a, int p, int p = mod)

int inv(int x)

int getlen(int x)

void init(/*int p,*/ int lim)

void ntt(int *a, int lim, int opt) }}

if(opt == -1)

}void mul(int *a, int *b, int n, int m)

};using namespace poly;

int n, a[maxn], b[maxn], c[maxn], mx;

ll sum[maxn];

ll comb(int n)

void solve()

signed main()

HDU 4305(生成樹計數)

2015 09 07 22 23 26 傳送門 題意 平面上300個點,如果兩點之間距離 r,且兩點形成的線段上沒有另外的點,那麼兩點之間有一條無向邊。問生成樹的方案數。思路 暴力n 2建圖,關於判斷兩點形成線段上是否有其他點,比如判斷 k 點知否在 i j 之間,首先看斜率是否相等,不能直接求斜率...

HDU 2189來生一起走

題目 今天,又來了n位志願者,指揮部需要將他們分為若干個小組,小組的數量不限,但是要求每個小組的人數必須為素數,請問我們有幾種分組的方法呢?特別說明 1 可以只有乙個組 2 分組的方法只和人數有關,而與具體的人員無關,即 你可以假設人是無區別的。dp include include include ...

HDU 1228 A B 浙江大學研究生冠軍

problem description 讀入兩個小於100的正整數a和b,計算a b.須要注意的是 a和b的每一位數字由相應的英文單詞給出.input 測試輸入包括若干測試用例,每乙個測試用例佔一行,格式為 a b 相鄰兩字串有乙個空格間隔.當a和b同一時候為0時輸入結束,對應的結果不要輸出.out...