1. 程式人生 > >【BZOJ4517】排列計數(SDOI2016)-組合數學:錯排

【BZOJ4517】排列計數(SDOI2016)-組合數學:錯排

測試地址:排列計數
做法:本題需要用到組合數學中的錯排問題。
首先,如果兩個序列中穩定的位置不同,那麼兩個序列肯定不同,因此我們列舉穩定的位置,有Cnm種方案,然後對於剩下的元素,它們不能處在編號和它相同的位置上,學過組合數學的同學應該知道這就是經典的錯排問題,令長為n的排列中,對所有1in都有aii的排列數為D(n)個,我們有遞推式:
D(n)=(n1)(D(n1)+D(n2))
邊界條件為D(0)=1,D(1)=0。那麼本題的答案就是CnmD(n

m)
如果只是擺遞推式就太沒意思了,就來講講這個遞推式是怎麼來的吧。
我們列舉1所在的位置,顯然它不可能在1號位置,那麼其它任意位置它都可以選,共n1種選擇。然後對於它選擇的位置x,我們討論x在不在位置1上:
如果x在位置1上,那麼其它n2個元素都不能在自己的位置上,方案數為D(n2)
如果x不在位置1上,那麼它不能在位置1,而其它n2個元素都不能在自己的位置上,方案數為D(n1)
這就是上述遞推式的由來。於是我們就解決了這一題。
以下是本人程式碼:

#include <bits/stdc++.h>
using namespace std; typedef long long ll; const ll mod=1000000007; int T,n[500010],m[500010],maxn=0; ll fac[1000010],inv[1000010],fi[1000010],D[1000010]; ll C(int n,int m) { return fac[n]*fi[m]%mod*fi[n-m]%mod; } int main() { scanf("%d",&T); for(int i=1;i<=T;i++) { scanf("%d%d",&n[i],&m[i]); maxn=max(maxn,n[i]); } fac[0
]=fac[1]=inv[0]=inv[1]=fi[0]=fi[1]=1; D[0]=1,D[1]=0; for(ll i=2;i<=(ll)maxn;i++) { fac[i]=fac[i-1]*i%mod; inv[i]=(mod-mod/i)*inv[mod%i]%mod; fi[i]=fi[i-1]*inv[i]%mod; D[i]=(i-1)*(D[i-1]+D[i-2])%mod; } for(int i=1;i<=T;i++) printf("%lld\n",C(n[i],m[i])*D[n[i]-m[i]]%mod); return 0; }

相關推薦

BZOJ4517排列計數SDOI2016-組合數學

測試地址:排列計數 做法:本題需要用到組合數學中的錯排問題。 首先,如果兩個序列中穩定的位置不同,那麼兩個序列肯定不同,因此我們列舉穩定的位置,有CmnCnm種方案,然後對於剩下的元素,它們不能處在

OpenCV影象變換邊緣檢測梯度運算元、Sobel運算元和Laplace運算元

邊緣 邊緣(edge)是指影象區域性強度變化最顯著的部分。主要存在於目標與目標、目標與背景、區域與區域(包括不同色彩)之間,是影象分割、紋理特徵和形狀特徵等影象分析的重要基礎。 影象強度的顯著變化可分為: •階躍變化函式,即影象強度在不連續處的兩邊的畫

2018.09.18BZOJ4517SDOI2016排列計數組合數學問題

Description 求有多少種長度為 n 的序列 A,滿足以下條件: 1 ~ n 這 n 個數在序列中各出現了一次 若第 i 個數 A[i] 的值為 i,則稱 i 是穩定的。序列恰好有 m 個數是穩定的 滿足條件的序列可能很多,序列數對 10^9+7 取模。

原創演算法分享4Cardinality Estimate 基數計數概率演算法

讀過《程式設計珠璣》(<Programming Pearls>)的人應該還對開篇的Case記憶猶新,大概的場景是: 作者的一位在電話公司工作的朋友想要統計一段時間內不同的電話號碼的個數,電話號碼的數量很大,當時的記憶體很小,所以不能把所有的電話號碼全部放到記憶體來去重統計,他的朋友很苦惱。 作

ZJOJ2010數字計數數字計數

設f[i][j][p]表示長度為i 最高位為j p出現的個數 顯然 f[i][j][p]=sigma{f[i-1][k][p]} 其中k是次高位 但是最高位出現的那麼多次都沒有被我們算進去 但是很顯然只需要加上(i-2)^10就闊以了 然後常規的分[1,b],[1,a-1]解決 常規的分成兩部分 一部分最高位

模板負環spfa

sizeof 貪心 com image 一行 clas 存在 cst -m 洛谷——P3385 【模板】負環 題目描述 暴力枚舉/SPFA/Bellman-ford/奇怪的貪心/超神搜索 輸入輸出格式 輸入格式: 第一行一個正整數T表

模板矩陣加速數列

cst opera name 結果 ++ 取余 int 數列 names 題目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a數列的第n項對1000000007(10^9+7)取余的值。 輸入輸出格式 輸入格式: 第一行一

SVM入門線性分類器的求解——問題的轉化,直觀角度

content cli 樣本 image ges 五個 是你 角度 spa SVM入門(六)線性分類器的求解——問題的轉化,直觀角度 讓我再一次比較完整的重復一下我們要解決的問題:我們有屬於兩個類別的樣本點(並不限定這些點在二維空間中)若幹,如圖, 圓形的樣本點定為正樣

leetcodeWord Breakpython

條件 text for -m 是我 tex eas sso false 思路是這種。我們從第一個字符開始向後依次找,直到找到一個斷句的地方,使得當前獲得的子串在dict中,若找到最後都沒找到。那麽就是False了。 在找到第一個後,接下來找下一個斷句處,當然是從第

JMeter學習參數化

一個 ngx adr conf 英文逗號 .net 註意 itl ron JMeter也有像LR中的參數化,本篇就來介紹下JMeter的參數化如何去實現。 參數化:錄制腳本中有登錄操作,需要輸入用戶名和密碼,假如系統不允許相同的用戶名和密碼同時登錄,或者想更好的模擬多個

JMeter學習元件的作用域與執行順序

ces ner 處理器 規則 fig 子節點 控制器 conf 節點 1.元件的作用域 JMeter中共有8類可被執行的元件(測試計劃與線程組不屬於元件),這些元件中,取樣器是典型的不與其它元件發生交互作用的元件,邏輯控制器只對其子節點的取樣器有效,而其它元件(config

JMeter學習錄制腳本

使用 get 運行 喜歡 錄制完成 帶來 免費 sdn title ---------------------------------------------------------------------------------------------------- 環境

P1939 模板矩陣加速數列

include algo pid str ostream 格式 矩陣加速 continue pri 鏈接: P1939 【模板】矩陣加速(數列) 題目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a數列的第n項對

Fortinet飛塔FortiGate防火墻低端產品命令行下配置RIP

rip fortinet forgate 飛塔防火墻 命令行配置rip 前言:FortiGate中端、高端產品支持web頁面配置RIP/OSPF/BGP,低端(桌面級)產品不支持,只支持CLI配置------雖然官網有手冊(英文版),但沒有實際案例,並給出建立連接的結果來的舒服~~這就是此

貪心紀念品分組P1094

scanf name print 所有 namespace 整數 數據 %d 輸出格式 題目描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據價格進行分組,但每組最多只能包括兩件紀念品,

4 簡單繪圖

dispose alt draw bsp rom 形狀 .html yellow tex 在上一篇裏已經向大家介紹了如何使用GDI+繪制簡單的圖像,這一篇繼續向大家介紹其它一些繪圖知識. 1.首先我們來看下上一篇中我們使用過的Pen. Pen的屬性主要有: Color(顏色

luogu_1939 模板矩陣加速數列

iostream urn 加速 spa con () truct highlight ems #include <cstdio> #include <iostream> #include <cstring> using namespac

VBA 入門

文件的 方法 記錄 glob 數字 數據 list 目錄 處理 VBA語言的基礎認識 由 vietdung90 創建,最後一次修改 2016-10-18 【轉自W3CSCHOOL】 第一節:標識符 一、定義 標識符是一種標識變量、常量、過程、函數、類等語言構

CODEFORCES 891B Gluttony構造

ray markdown tinc lower blog clu include first right codeforces 891B Gluttony 鏈接:http://codeforces.com/problemset/problem/891/B Descripti

UVA201 Squares模擬

ref size || for != %d else eof mark 題目 題目 ? ? 分析 記錄一下再預處理一下。 ? ? 代碼 #include <bits/stdc++.h> int main() { int t=0,s,n; wh