20190712B組

20190712B組

T1:10(0)

賽時:

第一題看似要找規律,但又不是。

於是我想應該是數論——排列組合?

可是推不出來,放棄去打暴力,就這樣與正解擦邊而過。

回想起來真有點痛心。

賽後:

假設將買《變形金剛3》票的人記爲s 。

買《哈利波特7》的人記爲x,則n個買《變形金剛3》的與m個買《哈利波特7》的人的隊伍就可以用一個具有n個s和m個x的字符串,顯然這樣的字符串共有C(n+m,n)個,其中不滿足問題要求的串一定存在一個最靠左的位置p,使得從第一個字符到第p個字符爲止的子串中x的個數比s的個數大1.

如sxsxx就是一個不滿足條件的串,其中p=5。

我們將從頭到p爲止的子串中的字符s換成x則得到一個具有n+1個s,m-1個x的串,可以證明這種轉換是一一對應的,即任意一個n+1個s,m-1個x的串都可以按照逆規則轉換成一個不滿足題目條件的串,轉換規則爲在任意一個n+1個s,m-1個x中找到最靠左的p,使得從頭到p的子串中s的個數比x個數大1,將到p爲止的子串中的s與x互換則得到n個s和m個x的串,且此串一定不能滿足條件,而具有n+1個s,m-1個x的串只有C(n+m,n+1)。

那麼ans=C(n+m,n)-C(n+m,n+1)=(n+1-m)*(m+n)!/(m!*(n+1)!)中種方案可滿足條件。

由於問題的規模很大,結果遠遠超出longint,要用高精度算法,雖然結果表達式中有分母,但實際結果一定是整數,所以不需要除法運算,具體運算時只要求出(n+1-m)*(m+n)!/(m!*(n+1)!的質因子分解式,然後做高精度即可,而任意一個質因子r在n!中出現次數爲[n/r]+[n/(r^2)]+[n/(r^3)]+...[n/(r^k)],[]爲取整。

算法:

數論——排列組合

T2:100(100)

賽時:

一眼望去就知道是道水題。

直接去找01串的數。

不管用bfs或dfs或for,都可以。

但看到數據,要用unsigned long long,便立馬打起十二分精神。

賽後:

如果從m出發來求的話就不好做了,我們可以從n*m出發來做,實際上我們只關心對n的餘數,而一個數(x1x2...xn)對n的餘數可以通過(x1x2x3...xn-1)對n的餘數得到,關係式爲(x1x2...xn)mod n =(10*(x1x2..xn-1)mod n+xn)mod n ;題目又要求最小的,所以可以用bfs來做,用bfs[i,1]表示當前選0還是1,bfs[i, 2]表示當前的餘數,bfs[i,3]表是父結點,用bfs即可。

複雜度O(N)

算法:

暴力

T3:0(100)

賽時:

看完題目,感覺有點像八皇后。

又看了下數據範圍,便覺得用狀壓dp。

可是狀壓dp的初值想了很就才過了樣例。

但結果竟是0分。

發現有細節打錯了,改後還是會超時,要做個優化。

賽後:

看到數據範圍n<=20,m<=10,方案種數<=2^63-1。

由於方案總數較大,若採用單純的搜索算法,很難做到不超時。

其實觀察一下數據規模中的n和m,m<=10,這是一條重要的信息,m比n*n少得多,那麼雕塑“安置在禁區內的方案數”

就必然比“安置在禁區外的”方案數少得多,"安置在禁區內的雕塑仍可以用dfs,但是必須搞清一個問題,計算出:

安置在禁區內的方案總數與求不在禁區的方案數又有什麼關係呢,這就恰好就是容斥原理中淘汰原則的十分巧妙的運用。

再來進行進一步的分析:用rk表示把k個雕塑放在了n*n的方格上,並且這k個雕塑都處在禁區放置位置上的方案數,

根據容斥原理的推論n個雕塑都安置在非禁區內的方案數等於

n!-r1*(n-1)!+r2*(n-2)-r3*(n-3)!...(-1)^k*rk*(n-k)!...+(-1)^n*rn

算法:

狀壓dp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章