Journey to Un‘Goro 贪心,找规律,搜索(沈阳)
生活随笔
收集整理的這篇文章主要介紹了
Journey to Un‘Goro 贪心,找规律,搜索(沈阳)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意 :
- 讓我們構造一個長度為n的只包含’b’和‘r’的字符串,要求所構造的字符串的子序列滿意的個數最多
- 滿意的定義:對于序列[l,r],其中’r’出現的個數是奇數,那么就是滿意的
- 按字典序輸出前100個
思路 :
- 找最大對數,肯定是全r最優,直接計算即可
- 首先需要求[l,r][l,r][l,r]內‘r’的個數,可以想到前綴和
- 我們定義數組g[N]g[N]g[N],g[i]g[i]g[i]表示字符串前i位里r出現的個數
- 那么對于序列[l,r][l,r][l,r],r出現的個數就是g[r]?g[l?1]g[r] - g[l - 1]g[r]?g[l?1]
- 只有g[r]g[r]g[r]和g[l?1]g[l - 1]g[l?1]的奇偶性不一致時,r出現的個數會是奇數,該字符串才滿意
- 設這些前綴和中有x個奇數,y個偶數,則滿足x+y=nx+y=nx+y=n,且此時我們的答案就是x?yx*yx?y
- 則由均值不等式x+y≥2xyx + y \geq 2\sqrt{xy}x+y≥2xy?得到xy≤(x+y2)2xy \leq (\frac{x+y}{2})^2xy≤(2x+y?)2,當且僅當x=y時取等號
- 即x=y=n2x=y=\frac{n}{2}x=y=2n?時,答案最大
- 因為只需要輸出前100個,搜索即可
- x*y為n+12?n+22\frac{n+1}{2} * \frac{n+2}{2}2n+1??2n+2?,x和y分別不能超過n+22\frac {n+2}{2}2n+2?
- dfs傳入四個參數,當前字符串的第i位,當前字符串的前綴和為奇數的個數,為偶數的個數,前i-1位r的個數
- dfs時首先判斷已經輸出字符串的個數和前綴和分別為奇數偶數的個數
- 然后是判斷當前這位是否已經第n位
- 再根據前i-1位r的個數分別dfs
- 觀察樣例1,n=1時,輸出"r",第0位以前的‘r’的個數的前綴和是0,偶數,因此dfs第一次傳入參數在第二個位置應為1
- 字典序最小表現在每次dfs都是先放b后放r的
- 注意要開long long,因為輸出個數時溢出了
總結
以上是生活随笔為你收集整理的Journey to Un‘Goro 贪心,找规律,搜索(沈阳)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scholomance Academy
- 下一篇: Mr. Main and Windmil