uva 11174 排列組合 搜尋

2022-09-16 15:00:16 字數 1152 閱讀 1300

依然是liurujia計數練習題。依然是自己想沒想出來,在mod是素數的情況下除以x即為乘x的逆。這個真心以前沒聽過,用了這個方法後處理就變得十分巧妙。

整個程式步驟還是很清晰的,先上來算階乘與逆(求數的逆還是有點沒理解透,需要後續章節繼續學習)。然後讀入建圖只能用鄰接表了,注意加上最開始的那個根節點就行了。

然後就是搜尋按照書上的公式計算就行了。

**如下:

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

#define len 40100

8#define mod 1000000007

9#define ll long long

10using

namespace

std;

1112

intn, m, isrt[len];

13ll jc[len], rjc[len], ans;

14 vectormap[len];

1516

//擴充套件歐幾里德

17 ll extend_gcd(ll a, ll b, ll &x,ll &y)

23else

27return

_m;28}29

30//

初始化階乘和他的逆

31void

cntjc()

3241}42

43void

init()

4449

//建圖

50int

a, b;

51 scanf("

%d%d

", &n, &m);

52for(int i=0; i)

57//

加入總的根節點

58for(int i=1; i<=n; i++)61}

6263

int dfs(int

vex)

6469

if(vex) ans = ans*rjc[cnt]%mod;

70return

cnt;71}

7273

intmain()

7487

return0;

88 }

view code

uva1352 排列組合

題意 給你幾個正方體,每個正方體的六個面都塗有顏色,現在你要把這些正方體重新塗色,使得所有正方體都一樣 六個面顏色相同,正方體可以旋轉 問最少重塗幾個面 思路 首先,如果正方體不能旋轉,那麼要怎麼塗.很顯然,每一面都找出一樣的顏色最多的那個顏色,把其他的都塗成這個顏色,那麼就是最少的.但是正方體可以...

Uva 580 排列組合

我發現數學還是很有用的 o 想了一節課才推出式子,數學競賽的一會就想出來了orz.要看排列組合的書了.推導過程有時間在寫估計不會了 code include include include include include include include define fo i,a,b for int...

8 排列組合

1 2 permutations 3 排列組合 4 輸入abc,輸出所有可能的排列結果 5 輸入 abc 6 輸出 abc 7 acb 8 bac 9 bca 10 cab 11 cba 12 1314 include15 16using namespace std 1718 int c1 0 19...