龐果英雄會 子串行的個數

2021-06-18 10:57:58 字數 691 閱讀 1121

本題同樣來自caopengcs,只要你有興趣,每個人都可以出題(出題入口在主頁右側邊欄「貢獻題目」->「我要發布」內),以下是題目詳情:

要求輸出a的不同子串行的數量。

輸入:

輸出:剛開始的時候我總想著直接去算排列組合,然後根據容斥原理把重複的去掉,從而得到結果,後來發現這樣不是不行,要考慮的東西實在是太多了,程式設計起來非常麻煩。放棄了。

後來休息了一天,再看的時候換了乙個思路,仔細分析了一下題目,按照遞推關係,找到乙個比較靠譜的思路。

設 f(k)為k長度的序列的子串行個數,那麼很顯然有以下推論:

f(k)=2*f(k-1)+1

f(k)=2*f(k-1)-f(a[k]上次出現的位置-1)

有了這兩個表示式,就是乙個完整的遞推關係了,a[k]上次出現的位置的儲存,可以用乙個hash表來儲存,這樣速度很快,但是題目說a[k]的範圍是0到220,那可以用乙個220的陣列來儲存,反正也不會溢位,省得用hash了。

**比較簡單,具體的可以上github上看

subarray[0]=0;

for(int i=1;i<=n;i++)

else

lastsameindex[a[i-1]]=i;

}

挑戰龐果英雄會之子串行的個數

題目詳情 本題同樣來自caopengcs,只要你有興趣,每個人都可以出題 出題入口在主頁右側邊欄 貢獻題目 我要發布 內 以下是題目詳情 子串行的定義 對於乙個序列a a 1 a 2 a n 則非空序列a a p1 a p2 a pm 為a的乙個子串行,其中1 p1例如 4,14,2,3和14,1,...

龐果英雄會 陣列排序

陣列排序 本題來自caopengcs,只要你有興趣,每個人都可以出題 出題入口在主頁右側邊欄 貢獻題目 內 以下是題目詳情 給定乙個包含1 n的數列,我們通過交換任意兩個元素給數列重新排序。求最少需要多少次交換,能把陣列排成按1 n遞增的順序,其中,陣列長度不超過100。例如 原陣列是3,2,1,我...

龐果英雄會 覆蓋數字

龐果覆蓋數字原題如下 給定整數區間 a,b 和整數區間 x,y 你可以使用任意多次a,b之間的整數做加法,可以湊出多少個 x,y 區間內的整數?輸入 a,b,x,y,其中1 a b 1000000000,1 x y 1000000000。輸出 用 a,b 內的整數做任意多次加法,可以得到多少個 x,...