有下面這樣的乙個網格棋盤,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後的結果。輸入輸出格式...