10 9 下午 考試

2022-05-20 22:20:27 字數 1862 閱讀 5697

t1

f(i)表示不和法數大於i個的數量

$$f(i)=c_n^ic_^$$

首先n>m||k*n

先不考慮

用擋板法易知

$$ans=c_^$$

即給m個果子中間再加上n-1個擋板的位置,在選n-1個

那考慮必須放乙個的情況,只要預先把m  -n,相當於每個籃子先放乙個

那考慮不合法數》=i個,只需要預先給i個放k個,那這i個一定不合法

但是不保證其他的合法,也不保證這i個不合法的果子數一定是k+1個

所以要用到容斥

這種我們確定了i個不合法的最低高度,但是同乙個狀態會被像上圖一樣,被列舉多次

所以要容斥

#include #include #include #include #include #include #define mem(a,b) memset(a,b,sizeof(a))

#define ll long long

using namespace std;

const int mod=998244353;

const int n=10000066;

ll mi(ll a,ll ci)

return ans;

}ll jie[n],jieni[n];

void chu()

ll n,m,k;

inline ll c(ll n,ll m)

ll ans=0;

for(ll i=0;i<=m;++i)

ans=(ans+c(n,i)*c(m-i*k-1,n-1)%mod*((i&1)?-1:1)+mod)%mod;

cout<

t1t2

仔細想一想就會發現

一條鏈上、乙個環上只能放乙個

如果有多條鏈、多個環組合在一起,ans還是最長鏈的長度

那只需要tarjan縮個點,再求個最長鏈即可

#include #include #include #include #include #include #define mem(a,b) memset(a,b,sizeof(a))

#define ll long long

#define dd double

using namespace std;

inline int read()

return ans;

}const int n=1000006;

struct son

;struct ttt

void addbian(int u,int v)

}h[2];

int n,m;

int dfn[n],low[n],now;

int zhan[n*5],he;

bool flag[n];

int dui[n],con,sun[n];

inline void tarjan(int x)

else

if(flag[temp])

}if(dfn[x]==low[x])

}}void chu()

}}int mx[n];

void dfs(int x)

{ flag[x]=1;

int temp;

mx[x]=sun[x];

for(int i=h[1].first[x];i!=-1;i=h[1].a1[i].next)

{temp=h[1].a1[i].v;

if(flag[temp])

{if(mx[x]

t2然後t3還不會呢...

1014下午考試

題目大意 有乙個 n m 的矩陣,矩陣的每個位置上可以放置乙個數。對於第i行,第i行的差異定義為該行的最大數和最小數的差。乙個矩陣的差異,定義為矩陣中每一行差異的最大值。現在給定k個數v 1.k 問 從這k個數中選 n m 個數放入矩陣,能夠得到的矩陣的差異最小值是多少。n m k 100000,n...

10 30 下午考試

p76 年?月?日?題目名稱 他 她 它 名稱 he she it 輸入 he.in she.in it.in 輸出 he.out she.out it.out 每個測試點時限 1 秒 1 秒 1 秒 記憶體限制 512mb 512mb 512mb 測試點數目 10 10 10 每個測試點分值 10...

4 27 下午 閱讀

預設進入系統,我們會看到這樣的字元 root localhost 其中 代表當前是 root 使用者登入,如果是 表示當前為普通使用者。我們了解linux由很多目錄檔案構成,那我們來學習第乙個 linux 命令 cd命令,cd home 解析 進入 home 目錄cd root 進入 root 目錄...