牛客網暑期ACM多校訓練營(第四場)

2022-08-20 11:12:19 字數 1722 閱讀 6330

rank

solvedab

cdef

ghij

71/465

4/10oø

øoøo

o..ø

o: 當場通過

ø: 賽後通過

.: 尚未通過

solved by ch&chelly

upsolved by chelly

chelly's solution

首先需要發現乙個性質,即乙個位置頂多被兩條線段覆蓋

於是就可以dp了,首先將所有線段按照右端點從小到大排序

dp[i][j]表示選了第i個線段,已經覆蓋的區間為[1,a[i].r],上乙個線段的右端點在j的情況下的和的最小值

轉移就列舉前面的一條線段,注意用字首min優化

時間複雜度\(o(nm)\)

upsolved by chelly

chelly's solution

看見\(a(n)\)和\(a(\frac)\)的關係,要想到二進位制

經過簡單分析發現ans(n)=cal(n)+cal(n/2)+cal(n/4)+cal(n/8)+..........

其中cal(n)滿足若n%40/3則cal(n)=1,若滿足n%41/2則cal(n)=-1

光分析出這樣的性質仍然不夠,我們考慮%4的意義,其實就是二進位制的最後兩位

於是我們得出計算ans(n)的方法,就是考察相鄰的兩個二進位制位,若相等則+1,若不等則-1

於是就可以數字dp了

solved by ch

ch's solution

upsolved by chelly

chelly's solution

每個點(x,y)對答案的貢獻就是1-π(1-p[i]),其中i是(x,y)右上方的點

那現在我們的操作就是對於每個點,把左下角的乙個矩形全部乘上乙個數,然後要詢問最後的和

第一想法是二維字首和,但座標範圍太大,不行

其實可以掃瞄線做,我們把掃瞄線從上往下掃,每層掃瞄線維護當前這個y對應的每個位置的值

容易發現兩個離散的y之間的答案是相同的,所以可以離散之後掃瞄線

總結一下,就是我們從上往下掃瞄線,需要支援區間乘法,區間求和,這個直接用乙個線段樹即可

solved by chelly

chelly's solution

solved by syf

syf's solution

unsolved

unsolved

upsolved by chelly

用並查集維護f[i]表示從i位置向右看第乙個沒填的位置是哪

然後用乙個優先佇列存下目前已經能填的數字(剛開始是那些a[i]%ni的數字)

將目前優先佇列裡最小的那個數字(a[x],x)填完之後,我們會解鎖乙個新的可填位置,那就是t=find((x+1)%n),若a[t]~t中間都是填過了(即find(a[t])t),那麼(a[t],t)就成為了乙個可填的位置,將其加入優先佇列

最後將優先佇列裡出隊的順序輸出即可

時間複雜度\(o(nlogn)\)

牛客網暑期ACM多校訓練營(第四場)F

n x m的矩形,選個p x q的矩形去掉,兩個矩形中 重合,去掉後的矩形上下左右對稱 求 p,q 方案數 n,m 2000,n,m是偶數,p n 且 q m 直接求對稱的外框有多寬多長,答案就是長 寬 includeusing namespace std char a 2010 2010 int ...

牛客網暑期ACM多校訓練營(第九場)

做法 看到下標 xor 這種情況就想 fwt 可是半天沒思路,於是放棄了。其實這個 n 瘋狂暗示啊。設未知數向量為 x 列一下方程組就可以發現有 b k sum a i x j 做法就顯然了吧,把 a 和 b 分別 fwt 對應相除然後反變換即可。表示前天才學的 fwt 就不會使了。include ...

牛客網暑期ACM多校訓練營(第五場)

二分答案,然後就轉化為是否滿足 frac d sum s i c i sum s i d sum s i c i d 0 顯然科目越少gpa越高,於是去掉最小的k個判斷即可。include define rep i,a,b for int i a i b i define per i,a,b for...