日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bzoj4563放棋子

發(fā)布時(shí)間:2025/3/8 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj4563放棋子 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

每一行只有一個(gè)障礙,每一列也只有一個(gè)障礙
可以把某些行交換一下,得到類似下面的格式
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
交換之后并不影響方案數(shù)
然后,把每一列壓縮成一個(gè)位置,問題轉(zhuǎn)化為每一個(gè)位置放一個(gè)棋子且不能放在原來的位置(第i個(gè)個(gè)棋子原來的位置是i)
轉(zhuǎn)化為錯(cuò)排公式

#include<iostream> #include<cstdio> #include<cstring> #define mod 1000000000 #define LL long long #define maxn 5005 using namespace std; int n; struct Bignum {LL s[maxn];int len;Bignum(){ memset(s,0,sizeof(s)); len=0; } }A,B,C; Bignum operator + (const Bignum a,const Bignum b) {Bignum c;int i=1;LL x=0;while(i<=a.len||i<=b.len){c.s[i]=x+a.s[i]+b.s[i];x=c.s[i]/mod;c.s[i]%=mod; i++;}c.len=max(a.len,b.len);while(x){ c.s[++c.len]=x%mod; x/=mod;}while(c.len&&!c.s[c.len]) c.len--;return c; } Bignum operator *(const Bignum a,int b) {Bignum c;c.len=a.len;LL x=0;for(int i=1;i<=a.len;i++){c.s[i]=a.s[i]*(LL)b+x;x=c.s[i]/mod;c.s[i]%=mod;}while(x){ c.s[++c.len]=x%mod; x/=mod; }while(c.len&&!c.s[c.len]) c.len--;return c; } void print(Bignum &a) {printf("%lld",a.s[a.len]);for(int i=a.len-1;i>=1;i--)printf("%09lld",a.s[i]);printf("\n"); } int main() {//freopen("chess_2016.in","r",stdin);//freopen("chess_2016.out","w",stdout);scanf("%d",&n);int x;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) scanf("%d",&x);if(n==1){ printf("0\n"); return 0; }if(n==2){ printf("1\n"); return 0; }A.len=1; A.s[1]=0; B.len=1; B.s[1]=1; for(int i=3;i<=n;i++){ C=(A+B)*(LL)(i-1);A=B;B=C;}print(C);return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/hunterxhunterl/p/7780658.html

總結(jié)

以上是生活随笔為你收集整理的bzoj4563放棋子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。