復(fù)盤|2022年度杭州未來科技城數(shù)字經(jīng)濟(jì)人才編程大賽
信號接收
【排序】題意就是所有發(fā)射源發(fā)出的信號區(qū)間不能重疊。遍歷,比較前一個的右端點(diǎn)和這一個的左端點(diǎn)。
黑白棋游戲
【滑動窗口】1的總數(shù)是幾,窗口大小就是幾。掃一遍,求窗口內(nèi)1的最多個數(shù)(相當(dāng)于求最少交換0的次數(shù))。
快遞中轉(zhuǎn)站選址
【中位數(shù)貪心】選的x和y互相獨(dú)立,可以將二維問題轉(zhuǎn)化為兩個一維問題,abs(x - x1) + abs(y - y1) + abs(x - x2) + abs (y - y2),分組x一組y一組,abs(x - x1) + abs(x - x2) ? + ? ?abs(y - y1) + abs (y - y2)。找所有x的中位數(shù),以及所有y的中位數(shù),(x,y)就是中轉(zhuǎn)站坐標(biāo),然后再遍歷一遍,求每個1到中轉(zhuǎn)站的距離總和,即為ans。
c++可以把O(nlogn)的排序換成O(n)的nth_element,寫法:nth_elment(xs.begin(), xs.begin + xs.size() / 2, xs.end());
門店商品調(diào)配
【子集狀壓 DP】dp[i]表示集合i通過商品調(diào)配后所有元素值均為0最少需要調(diào)配商品的次數(shù)。用二進(jìn)制枚舉i的子集k和補(bǔ)集i ^ j,if sum[j] == 0可以轉(zhuǎn)移。dp[i]至多是i.size() - 1。分治,大問題可拆成兩個小問題,dp[i] = min(dp[i], dp[j] + dp[i ^ j])。特殊情況,sum[i] !=0非法, dp[i] = INT_MAX / 2。(c++的__builtin_popcount可以計算1的個數(shù))
【DFS】暴搜,每次消一個最小的商品。