1. 程式人生 > 其它 >Codeforces Round #732 (Div.1) 題解

Codeforces Round #732 (Div.1) 題解

hackforces(至少我被叉了),wzbl/ll

實在是打擊人信心的一場比賽啊……一不注意就掉了 50+ 分,rating 沒了啊/ll/dk/wq/kk

A

Weak pretest!!!!!11 /fn/fn/fn

一個很顯然的注意點是在交換前後,對於每一種數 \(c\) 而言,奇數位上的 \(c\) 中朝右的人數的奇偶性不會發生變化,偶數位上的 \(c\) 中朝右的人數的奇偶性也不會發生變化,因此我們只需檢驗排序前後奇偶位上數的組成是否相同即可,時間複雜度 \(Tn\log n\)

現場降智選手,指我無疑了

B

首先根據手玩樣例法可以發現 \(\dbinom{13}{5}=\dbinom{13}{8}=1287,\dbinom{13}{4}=\dbinom{13}{9}=715\)

,因此考慮 \(5,8\),以及後面的 \(4,9\) 是個什麼東西,再通過瞪眼法可以發現 \(8\) 恰好是樣例中 \(0\) 的個數,\(5\) 恰好是每個全 \(1\) 段中 \(1\) 的個數除以二下取整,於是寫個組合數求一求即可。

證明?別問我,我什麼也不知道

C

首先記目前沒有確定是否被劃分進集合的排列的集合為 \(S\),那麼我們列舉 \(S\) 中每一個排列 \(p\),如果排列 \(p\) 中存在一個位置滿足 \(S\) 中沒有其他排列和它值相同,那麼根據題目的性質顯然它只能在前 \(n\) 個排列中,與此同時我們把與它有重複值的排列設為“不在前 \(n\) 個排列中”並從 \(S\)

中刪去;否則根據抽屜原理,每個數在 \(S\) 對應的列中必須恰好出現了兩次,這也就意味著那些在原拉丁方陣中的排列和不在原拉丁方陣中的排列是平分秋色的,都能和已經選出的排列集合組成拉丁方陣,此時我們需要將答案乘以 \(2\),並隨便選擇一個排列設為在拉丁方陣中,並將與其存在重複值的排列從 \(S\) 中刪除,重複以下步驟直到選出 \(n\) 個排列為止即可。

時間複雜度 \(n^3\)

D

我們考慮求出每個排列所有時刻座標的和 \(s1_i\) 以及平方和 \(s2_i\),記 \(S=\sum\limits_{i=1}^mv_i,T=\sum\limits_{i=1}^mv_i^2\),那麼如果沒有錯誤元素,一定有 \(s1_{i+1}-s1_i=S\)

,由此可以確定錯誤元素所在的時刻 \(p\),而根據第 \(j\) 個人 \(i\) 時刻的座標為 \(x_{j}+i·v_j\) 可知,對於三個連續的時刻 \(t-1,t,t+1\),有

\[\begin{cases} \sum\limits_{j=1}^m(x_j+(t-1)·v_j)^2=s2_{t-1}\\ \sum\limits_{j=1}^m(x_j+t·v_j)^2=s2_{t}\\ \sum\limits_{j=1}^m(x_j+(t+1)·v_j)^2=s2_{t+1} \end{cases} \]

一式加三式減兩倍的二式,得

\[T=\dfrac{s2_{t-1}+s2_{t+1}-2s2_t}{2} \]

由此可以確定第 \(i\) 行所有座標的和及平方和,這樣我們列舉修改的元素是哪個,根據第 \(i\) 行座標的和求出被改前的元素,並 check 平方和是否滿足要求即可。

時間複雜度 \(nm\)