luogu P4931 情侶?給我燒了!

2022-02-05 02:46:39 字數 813 閱讀 9647

雙倍經驗

傳送門首先坐在一起的cp和不坐在一起的cp是相對獨立的,可以分開考慮,然後方案數相乘

坐在一起的cp,方案為\(\binom*\binom*k!*2^k\).首先選出k排座位,然後選出k對cp坐下,然後這k對可以任意打亂順序,並且每一對可以換座位

不坐在一起的cp,一開始以為就是個錯排,然後錯排其實是沒考慮一對cp坐在同一列的情況的.考慮遞推,設\(f[i]\)表示i個不坐在一起的cp的方案.首先可以選出兩個不是一對cp的人,方案為\(2i*(2i-2)\),然後欽定他們坐第一排.然後考慮這兩個人的另一半(嚴謹)

然後不坐一起cp的方案為\(2i*(2i-2)*(f[i-1]+(2x-2)*f[i-2])\)

然後預處理階乘以及逆元,還有f和2的次冪,乘起來就沒了

#include#define ll long long

#define db double

#define il inline

#define re register

using namespace std;

const int n=5e6+10,mod=998244353;

il int rd()

while(ch>='0'&&ch<='9')

return x*w;

}il int fpow(int a,int b)return an;}

int fac[n],iac[n],d[n],pw[n];

il int c(int n,int m)

int main()

return 0;

}

UOJ 493 螞蟻之旅

題目描述 給你無向圖的n個點和m條邊,保證這m條邊都不同且不會存在同一點的自環邊,現在問你至少要幾筆才能所有邊都畫一遍。一筆畫的時候筆不離開紙 輸入描述 多組資料,每組資料用空行隔開。對於每組資料,第一行兩個整數n,m表示點數和邊數。接下去m行每行兩個整數a,b 表示a,b之間有一條邊。輸出描述 對...

linux 編譯安裝GCC4 9 3

第一步 wget 第二步 第三步 解壓檔案,做一些準備工作 tar xjvf gcc 4.9.3.tar.bz2 cd gcc 4.9.3 contrib download prerequisites cloog 0.18.1 gmp 4.3.2 isl 0.12.2 mpc 0.8.1 mpfr ...

陣列翻轉 LeetCode 493 翻轉對

給定乙個陣列nums,如果i j且nums i 2 nums j 我們就將 i,j 稱作乙個重要翻轉對。你需要返回給定陣列中的重要翻轉對的數量。示例 輸入 1,3,2,3,1 輸出 2 注意 給定陣列的長度不會超過50000。輸入陣列中的所有數字都在32位整數的表示範圍內 歸併排序可以解決此題,也可...