關於521 用樹狀陣列(尺取法)

2021-07-15 15:05:53 字數 1232 閱讀 4065

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:2 描述

acm隊的流年對數學的研究不是很透徹,但是固執的他還是想一頭扎進去。

瀏覽網頁的流年忽然看到了網上有人用玫瑰花瓣拼成了521三個數字,頓時覺得好浪漫,因為每個男生都會不經意的成為浪漫的製造者。此後,流年走到**都能看到5、2、1三個數字,他怒了,現在他想知道在連續的數中有多少數全部包含了這三個數字。例如12356就算乙個,而5111就不算。特別的,如果他看到了521三個數連續出現,會特別的憤怒。例如35210。

輸入

多組測試資料:

一行給定兩個數a,b(0輸出

一行顯示他想要知道的數有幾個及顯示有多少個數字令他特別的憤怒。用空格隔開。

樣例輸入

200 500

300 900

1 600

樣例輸出

case 1:2 0

case 2:2 1

case 3:6 1

參考於:

//思路: 先打表,在使用,把0~1000000之間的數作下標定義兩個陣列,

//陣列每一項的值表示此下標以內的 521分開出現次數與連續出現的次數(樹狀陣列),

//最後用b,a-1作下標的陣列 相減即是答案

#include #define max 1000010

int m[max],n[max]; //儲存下標以內的數出現521的次數

int judge1(int x) //判斷是否含1,2,5

; //初始化為0,p的下標存x內出現數字,出現的標記為1

while(x > 0)

if(p[5] && p[2] && p[1]) //判斷是否都被標記 (都出現了)

return 1 ;

return 0;

}int judge2(int y)

;//原理同judge1

while(y > 520)

if(q[521])

return 1;

return 0;

}void find()

} n[521] = 1;

for(int i = 522;i < max;i ++ )//判斷連續521,原理同上 }

}int main()

return 0;

}

C 尺取法解決陣列問題

今天看見一道演算法題,大概意思是將乙個陣列,取乙個連續子陣列,使得輸出的是最大的子陣列和。想到了用尺取法。尺取法顧名思義,是像尺子一樣丈量自己的資料來源,取得自己所需的範圍,對計算連續子區間的很多問題都有不錯的效果。具體步驟如下 1.選擇起點,不斷延伸到達符合條件的終點 3 取範圍。實際上就是像蚯蚓...

關於尺取法的一些例子

最近做了一些關於尺取法的題,大概明白了一些套路。首先固定左端點,不斷地去取右端點,直到區間盡頭或者不滿足條件,然後判斷是否滿足條件,如果不滿足條件一般情況下是到了盡頭,然後去最值,然後刪去乙個左端點再在新的乙個左端點上不斷地去取右端點,這樣整個演算法的複雜度為o n poj 3061 尺取法版本 i...

關於樹狀陣列

身為蒟蒻的我 終於學會了 樹狀陣列 但因為自己還是太蒟蒻 還是糊里糊塗的 所以寫個部落格理理思路 樹狀陣列的數學模型 樹狀陣列的劃分依據的原理是任何正整數都可以表示為2的冪相加的形式 如13 2 3 2 2 2 1 進而可以利用這一特性來進行區間求和 設想一下現在乙個序列 長度為n 現在要進行區間求...