BZOJ 2729 高精度 組合數學

2022-04-30 04:45:13 字數 1599 閱讀 8387

思路:

考慮 把男生排成一排 女生和老師往裡插

分成兩種情況.

1. 女生中間夾著老師

2. 女生中間沒有夾著老師

求一下組合* 階乘就好了

先放python** 簡潔易懂

def

fact

(n):

temp=1

for i in range(1,n+1):

temp*=i

return temp

defc

(n,m):

if(nreturn

0return fact(n)/fact(m)/fact(n-m)

n, m = raw_input().split()

n=int(n)

m=int(m)

print (fact(n+2)-fact(n+1)*2)*fact(m)*c(n+3,m)+m*fact(n+1)*2*fact(m-1)*c(n+2,m-1)

高精寫掛了好幾次… 尷尬

//by siriusren

#include #include #include using namespace std;

struct node

int a[20050],len;

}fst,n_plus_one,n_plus_two,n_plus_three,m,m_minus_one,c1,c2,ans;

int n,m;

node operator*(node a,int b)return a;

}node operator-(node a,node b)

for(int i=a.len

-1;~i;i--)

else

if(!i)a.len

=0; }return a;

}node operator+(node a,node b)return a;

}node operator/(node a,int b)

for(int i=a.len

-1;~i;i--)

else

if(!i)a.len

=0; }

return a;

}node operator*(node a,node b)

}for(int i=0;i<=a.len

+10+b.len;i++)return c;

}node print(node a)

int main()fst.init();fst.a[0]=1;fst.len

=1; for(int i=m+1;i<=n+3;i++)fst=fst*i;

c1=fst;

fst=fst*m,fst=fst/(n+3),c2=fst;

if(n+3

len=c1.len

=0; for(int i=1;i<=n-m+3;i++)c1=c1/i,c2=c2/i;

ans=(n_plus_two-n_plus_one*2)*m*c1+n_plus_one*m*m_minus_one*c2*2;

print(ans);

}

BZOJ2729 排隊(組合數學 高精度)

hnoi2012 排隊 題意 某中學有 n 名男同學,m 名女同學和兩名老師要排隊參加體檢。他們排成一條直線,並且任意兩名女同學不能相鄰,兩名老師也不能相鄰,那麼一共有多少種排法呢?任意兩人不同 排列組合 高精度 考慮先放男生,後放老師,再放女生 先用男生把兩個老師隔開,再用男生和老師把所有女生隔開...

洛谷 P1037 floyd 組合數學 高精度

給出乙個整數n n 1030 n n 10 n n 1030 和k k k個變換規則 k 15 k le 15 k 15 規則 一位數可變換成另乙個一位數 規則的右部不能為零。例如 n 234n 234n 234。有規則 k 2 2 5 3 6 上面的整數234經過變換後可能產生出的整數為 包括原數...

演算法題 高精度乘法求組合數(Python)

輸入a,求cba的值。注意結果可能很大,需要使用高精度計算。輸入格式 共一行,包含兩個整數a和b。輸出格式 共一行,輸出cba的值。資料範圍 1 b a 5000 輸入樣例 5 3輸出樣例 10 線性篩法篩質數 def get primes n primes st true n for i in r...