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...