牛客網 Chessboard 組合數

2021-09-26 06:03:57 字數 1326 閱讀 7971

今天csl又來了tl。他看到tl有乙個非常大的棋盤和許多玻璃球。所以他有個主意。他對tl說:「你有多大的棋盤......和我一起玩遊戲怎麼樣?我會給你,你可以在棋盤上選擇乙個任意大的方形區域(假設你選擇乙個方形區域)和在每個正方形上放置一些玻璃球(每個正方形應放置不小於玻璃球)。您的位置需要滿足:如果我們選擇不同行和列的正方形,那麼無論我們如何選擇,總數這個方塊中的玻璃球應該總是相同的,不應該大於此。你只需要告訴我你有多少方法可以滿足這個要求。如果你不能告訴我,棋盤和玻璃球都屬於我!tl不想把棋盤和玻璃球交給csl,但是他知道聰明的csl已經在腦子裡找到了答案。你能幫他解決這個問題嗎?

思路:題意就是讓你找乙個k*k的區域,然後使得矩陣裡的每個數不小於m,並且不同行不同列的元素和等於t。

我們用a[i]表示第i行加了多少數,b[j]表示第j列加了多少數,因為要求不同行不同列的元素和相等,所以我們必須每次都給同一行的增加相同的元素,列同樣如此,所以我們可以計算總方案數c(t + 2k - 1, 2k - 1)

但是會有重複計算的情況,例如第i行j列的元素是a[i] + b[j], 如果讓a[i] - 1, b[j] + 1, 那麼還是之前的狀態,但是卻計算了兩次,所以我們需要減去重複計算的,只有當a[i] >= 1的時候才會重複計算,所以我們讓a[i] 都等於1,然後再分配,就是減去c(t + k - 1, 2k - 1)就行了。 

ll p[maxn], q[maxn]; //p是階乘,q是階乘的逆元

ll powermod(ll a, ll b, ll c)

return ans % c;

}void init()

ll c(ll n, ll m) //c(n, m) n是底數

int main()

}printf("%lld\n", ans);

}return 0;

}//c(t + 2k - 1, 2k - 1) - c(t + k - 1, 2k - 1) 總數-重複

牛客網 華為機試 020 牛客網

密碼要求 1.長度超過8位 2.包括大小寫字母.數字.其它符號,以上四種至少三種 3.不能有相同長度超2的子串重複 說明 長度超過2的子串 一組或多組長度超過2的子符串。每組佔一行 如果符合要求輸出 ok,否則輸出ng 示例1 021abc9000 021abc9abc1 021abc9000 02...

牛客網 乳酪

題目很簡單,中文題。複製了 乳酪之間距離不用管,只要開個並查集維護就好了,另外需要選好幾個點作為起點幾個點作為終點。o n 2 的建圖。感覺可以平面掃瞄。有空去試試。以下 ac includeusing namespace std const int maxn 1e5 5 define ll lon...

牛客網 A 招生

第一行,三個正整數n,m,p.後面n行,每行兩個正整數數a i,b i a i b i 分別表示第i個人的高考分和校測分。一行乙個數,表示答案 小a高考至少要考多少分。輸入6 3 750 700 530 683 625 703 620 699 623 710 538 654 599 輸出 inclu...