題目描述
快遞小哥每天都辛苦的送快遞,今天他需要送n份快遞給n個收件人,第i份快遞需要送給第i個收件人。 請問其中發生恰好k個送錯了的情況數是多少?
輸入存在多樣例。 每行輸入兩個整數n和k,1≤n≤1000,0≤k≤n。 如果兩個都為0,則表示輸入結束,這個樣例不需要處理。
輸出每行輸出乙個樣例的結果,因為數值會比較大,所有結果需要對109+7取模。
樣例輸入
1 1樣例輸出2 13 2
1000 1000
0 0
00337043040
這個題目其實就是三個點要注意:
1.錯排遞推公式:d[i] = (i-1)*(d[i-1] + d[i-2]) (i > 2) d[1] = 0, d[2] = 1;(公式詳解找維基百科:錯排)
2.排列組合公式(楊輝三角):c[i][j] = c[i-1][j] + c[i-1][j-1] (0 < i < 1000, j < i)
c[i][0] = c[i][i] = 1 (i < 1001)
3.就是就是當k為0的時候結果為1(我就是卡在這,開始怎麼都沒有想到0個沒錯其實就是全部送對,而全部送對就只有1種情況嘛!)
[cpp]view plain
copy
#include
using
namespace std;
const
int n = 1001;
const
int mod = 1000000007;
#define ll long long
ll d[n], c[n][n];
int main()
湘潭大學程式設計實踐 1194
題目描述 快遞小哥每天都辛苦的送快遞,今天他需要送n份快遞給n個收件人,第i份快遞需要送給第i個收件人。請問其中發生恰好k個送錯了的情況數是多少?輸入存在多樣例。每行輸入兩個整數n和k,1 n 1000,0 k n。如果兩個都為0,則表示輸入結束,這個樣例不需要處理。輸出每行輸出乙個樣例的結果,因為...
湘潭大學OJ1202逆序數(歸律)
題目描述 有n張卡片,分別標有數字1 n。有一天silence把他們按某種序列排好,然後從第一張開始取出一張,再拿一張放到最後面,再取出一張,再拿出一張放到最後面.知道n張卡片全部取走。把取出的卡片按取出的順序排好,正好是1,2,3,4,n。現在,告訴你n,silence希望你幫他計算原來的序列的逆...
Digit(湘潭大學比賽)
中文問題目就不解釋了。思路,找到這個數對應的的數字是多少,然後對這個數取對應的位置。步驟 先打表打出一位數字對應字串的長度,兩位數的,到8,9就差不多了。先確定給定的n是哪個位數的數字,這樣可以確定n指的是這個數字的第幾位。over include include include includeus...