Codeforces Round #673 (Div. 2)

zzdrws發表於2020-09-29

A. Copy-paste

簽到題
題設:給一串長度為n,值可變的陣列,和最大限度k,每次可選擇[1 , n]範圍內任意不相等的兩序號(i,j),使 a[ j ] = a[ j ] + a[ i ],當陣列中最大值會超過k(a[max]>k)時不可繼續操作,問最多可操作的次數。
思路:用小頂堆的優先佇列儲存所有值,先取出最小值並將其彈出,再將第二大的值加到最小值上,將求和後的該值再插入優先佇列,重複操作至最小值會超過k時停止。
——題解

B. Two Arrays

思維題
題設:給定一串長度為n陣列,和不幸值“T”,要求將此陣列拆分成兩個子陣列,並希望拆分後,對於屬於同一陣列兩個元素,相加等於T的情況儘可能少,要求將所有元素拆分的情況輸出,輸出值為1的放在黑色陣列中,輸出值為0則放在白色陣列中。
思路:對T進行情況考慮,先取一int型的值mid=T/2。若T為奇數,將所有小於mid的元素放在黑色數字中,大於等於mid的放在另一白色陣列中;若T為偶數,則等於mid的元素要儘可能均分到兩個陣列中,則只需在奇數情況下,將所有等於mid的值交錯放置。
——題解

相關文章