P1350 車的放置

2022-05-10 03:04:11 字數 1361 閱讀 9416

有下面這樣的乙個網格棋盤,a,b,c,d表示了對應邊長度,也就是對應格仔數。

當a=b=c=d=2時,對應下面這樣乙個棋盤

要在這個棋盤上放k個相互不攻擊的車,也就是這k個車沒有兩個車在同一行,也沒有兩個車在同一列,問有多少種方案。同樣只需要輸出答案mod 100003後的結果。

輸入格式:

輸入檔案place.in的第1行為有5個非負整數a, b, c, d和k。

輸出格式:

輸出檔案place.out包括1個正整數,為答案mod 100003後的結果。

輸入樣例#1:複製

2 2 2 2 2

輸出樣例#1:複製

【資料規模與約定】

對於部分資料,有b = 0;

對於部分資料,有a,b,c,d≤4。

對於100%的資料,a,b,c,d,k≤1000,且保證了至少有一種可行方案。

把棋盤拆成兩半

我們在上面\(a\times b\)的矩陣放了\(m\)個車,那麼就要在下面\((a+c-m)\times d\)的矩陣放\(k-m\)個車

分別用排列組合解決就是$$\sum kc_am\times c_b^m\times a_m^m\times c^\times c_d^\times a_^$$

#include#include#define m 100003

#define ll long long

using namespace std;

ll n,a,b,c,d,k,f[10001],s[10001],ans;

ll a[10001],b[10001],inv[100001];

int main()

for(int i=0;i<=min(a,min(b,k));i++) f[i]=a[a]*b[i]%m*b[a-i]%m*a[b]%m*b[i]%m*b[b-i]%m*a[i]%m;

for(int i=0;i<=min(a+c,min(d,k));i++) s[i]=a[a+c-k+i]*b[i]%m*b[a+c-k]%m*a[d]%m*b[i]%m*b[d-i]%m*a[i]%m;

for(int i=0;i<=k;i++) ans=(ans+f[i]*s[k-i]%m)%m;

printf("%lld",ans);

}

洛谷 P1350 車的放置

洛谷 p1350 車的放置 有下面這樣的乙個網格棋盤,a,b,c,d表示了對應邊長度,也就是對應格仔數。當a b c d 2時,對應下面這樣乙個棋盤 要在這個棋盤上放k個相互不攻擊的車,也就是這k個車沒有兩個車在同一行,也沒有兩個車在同一列,問有多少種方案。同樣只需要輸出答案mod 100003後的...

題解 洛谷P1350 車的放置(矩陣公式推導)

洛谷p1350 把矩陣分為上下兩塊n與m 放在n中的有i輛車則放在m中有k i輛車 n的長為a 寬為b m的長為a c 寬為d 在每個矩陣中的放置種類公式如下 a 長度,車輛 c 寬度,車輛 給出證明 比如對於n來說 可以在a列中找出i列放入車 所以是a a,i 而且有c b,i 種選擇列的方式 由...

洛谷1350 車的放置

題目描述 有下面這樣的乙個網格棋盤,a,b,c,d表示了對應邊長度,也就是對應格仔數。當a b c d 2時,對應下面這樣乙個棋盤 要在這個棋盤上放k個相互不攻擊的車,也就是這k個車沒有兩個車在同一行,也沒有兩個車在同一列,問有多少種方案。同樣只需要輸出答案mod 100003後的結果。輸入輸出格式...