cf 1471 B 最大貢獻

2021-10-14 02:00:21 字數 1055 閱讀 1795

t 組樣例 ,每組有長度為 n 的陣列 a 和 乙個數 x ,下一行 輸入陣列 a

如果a[i]%x==0 ,那麼就將 x個 a[i]/x 放在陣列的末尾,然後繼續這樣的操作,直到a[i]%x!=0時停止

求陣列的和

1.昨天打的比賽,其實題目很簡單,考慮一下每個數的最大貢獻值,然後直接模擬就好,但是不是直接暴力模擬啊

2.拿第二個樣例來說 ,[4,6,8,2] —>[4,6,8,2,2,2]---->[4,6,8,2,2,2,3,3]—>[4,6,8,2,2,2,3,3,4,4]—>[4,6,8,2,2,2,3,3,4,4,1,1]---->[4,6,8,2,2,2,3,3,4,4,1,1,1,1]—>[4,6,8,2,2,2,3,3,4,4,1,1,1,1,1,1]

3.我們模擬可以發現,只要是能被除盡,那麼它的貢獻值就是a[i],對於4,4/2/2,貢獻2c次,6/2貢獻1次,8/2/2/2,貢獻3次,2/2貢獻一次, 再看8雖然可以貢獻3次,但是遇到6/3的時候就不會再貢

4.所有我們用原陣列總和*最小次數+3前面的數=陣列的和

5.我們也可以認為原陣列的值肯定是貢獻的,然後進行模擬,迴圈遍歷陣列

#include

using

namespace std;

typedef

long

long ll;

const

int n=

1e5+10;

int a[n]

,b[n]

;int

main()

while

(true

)else}if

(!flag)

} cout<

}return0;

}

cf 551B 暴力列舉

交換a中字元的位置,求b,c字串在a中出現的最多次數 列舉b出現的次數,然後求出c在a中還可以出現的最大次數,求得最多的次數 關鍵在於如何計算b出現的次數 如下 for int i 0 i 26 i if s1 i sum min sum,ans i s1 i 知道了這個就不會超時了啦,我開始就沒想...

CF 453B狀態壓縮dp

題目鏈結 題意 給你n個數 1 n 100 每個數分別是ai 1 ai 30 問你求乙個數列bi,其中bi間的數兩兩的最大公約數為1 bi可能都是1 且使得 思路 既然bi可以全部取1,那麼每個bi的取值必定不超過30 1 30 59。由此可知我們只要知道60以內的所有數的素因子,並用數字標記的方式...

CF993B 公開交流

時間限制 1s 空間限制 256m 有兩個人各有一對由數字 1 到 9 構成的數對,他們兩人數對中都有且只有乙個相同的數字。他們兩人把自己的數對隱藏在很多數對中,然後在公開的通道中傳輸。每個數對中的數字都不同。請確定你是否可以從公共通道中的數對推導出這個相同的數字,或者確定他們互相知道了對方的數字,...