Educational Codeforces Round 111 (Rated for Div. 2) D. Excellent Arrays 组合数学
傳送門
文章目錄
- 題意:
- 思路:
題意:
給你一個數(shù)組aia_iai?,定義一個數(shù)組是好的當(dāng)且僅當(dāng)對于所有iii都有ai!=ia_i!=iai?!=i。定義f(a)f(a)f(a)表示數(shù)組aaa中i<j,ai+aj=i+ji<j,a_i+a_j=i+ji<j,ai?+aj?=i+j的(i,j)(i,j)(i,j)對數(shù)。定義一個數(shù)組是極好的包含以下三個條件:
(1)a(1)a(1)a數(shù)組是好的。
(2)l≤ai≤r(2)l\le a_i\le r(2)l≤ai?≤r
(3)f(a)(3)f(a)(3)f(a)在所有的好的數(shù)組中是最大的。
給定l,rl,rl,r,讓你求出來有多少個極好的數(shù)組。
n≤2e5,?109≤l≤1,n≤r≤109n\le2e5,-10^9\le l\le1,n\le r\le 10^9n≤2e5,?109≤l≤1,n≤r≤109
思路:
首先考慮f(a)f(a)f(a)最大的時候是什么情況,如果沒有ai!=ia_i!=iai?!=i的條件,肯定是ai=ia_i=iai?=i的時候最大。現(xiàn)在有這個條件,那么我們可以將其加上一個偏移量kkk,即ai+k,ai?ka_i+k,a_i-kai?+k,ai??k,考慮長度nnn的數(shù)組,一定是一半ai+ka_i+kai?+k,另一半ai?ka_i-kai??k,這樣f(a)=?n2???n2?f(a)=\left \lceil \frac{n}{2} \right \rceil * \left \lfloor \frac{n}{2} \right \rfloorf(a)=?2n????2n??,此時一定是最大的。
通過以上分析,我們知道每個位置一定是加上或減去一個偏移量kkk構(gòu)造出來的數(shù)組才有可能是極好的數(shù)組,由于aia_iai?的范圍有限制,我們分以下幾種情況討論:
(1)k≤min(1?l,r?n)(1)k\le min(1-l,r-n)(1)k≤min(1?l,r?n)
此時對于每個位置ai+k,ai?ka_i+k,a_i-kai?+k,ai??k兩個數(shù)都不會超過范圍,所以當(dāng)nnn為偶數(shù)的時候,可以選擇n/2n/2n/2個位置+k+k+k,貢獻就是C(n,n/2)C(n,n/2)C(n,n/2),是奇數(shù)的時候,可以選擇n/2n/2n/2個位置+k+k+k或者n/2+1n/2+1n/2+1個位置+k+k+k。
(2)k>min(1?l,r?n)(2)k>min(1-l,r-n)(2)k>min(1?l,r?n)
我們設(shè)k=min(1?l,r?n)+1k=min(1-l,r-n)+1k=min(1?l,r?n)+1,那么有max(1,l+k)?1max(1,l+k)-1max(1,l+k)?1個人必須+k+k+k,有n?min(n,r?k)n-min(n,r-k)n?min(n,r?k)個人必須?k-k?k,否則他們就越界了。設(shè)減去上述兩個剩下的位置是restrestrest,那么問題轉(zhuǎn)換成跟第一種情況一樣了,只是從nnn變成了restrestrest。
注意第二種情況我們不需要特判,只需要在求C(n,m)C(n,m)C(n,m)的時候判斷一下n,m<0,n<mn,m<0,n<mn,m<0,n<m的情況直接返回000即可。
第二種情況最多迭代nnn次,復(fù)雜度O(n)O(n)O(n)。
總結(jié)
以上是生活随笔為你收集整理的Educational Codeforces Round 111 (Rated for Div. 2) D. Excellent Arrays 组合数学的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Origin怎么把两张图合成一张 Ori
- 下一篇: AtCoder Regular Cont