《演算法競賽入門經典(第2版)》第五章知識點總結

2021-10-05 07:41:40 字數 3376 閱讀 6057

5-2ducci序列

1、整型陣列轉成string:

void

change

(int

*aa,

int mm)

}

流轉化,如果aa包含元素有:8,11,2,7那麼ssss的變化過程為:

8,811,8112,81127,是乙個累積的過程。

轉換成string型後放進集合:

a.

insert

(ssss)

;

2、string是可以和char[maxn]比較的

char sss[maxn]

;string ssss;

for(

int i=

0;i(ssss==sss)

3、在set中找匹配的元素

if

(find

(a.begin()

,a.end()

,ssss)

==a.

end())

else

else的那一部分表示找到了

4、整型陣列拷貝

memcpy

(s,ss,

sizeof

(ss)

);

整型陣列s和ss的大小相同,將ss的內容拷貝到了s上面,在cstring標頭檔案裡

5-3卡片遊戲

1、佇列的清理用的aa.clear();這個清理刪掉了所有元素沒有釋放記憶體。

2、佇列的幾種操作,pop()出隊,push()進隊,front()隊首元素。

3、迭代器的使用,vector遍歷經常使用迭代器。

5-4交換學生

1、在集合中查詢特定元素:要宣告庫algorithm

if

(find

(ss.

begin()

,ss.

end(

),s)

==ss.

end())

else

這是在集合中找和string型的s匹配的元素,如果找到執行else,沒有執行if。

2、整型陣列轉換為字串(流轉換)

stringstream pp;

for(

int j=

0;j<=

1;j++

)

注意要宣告庫sstream,不然會格式錯誤。

5-5複合詞

1、輸入可能造成的超時:

while

(cin>>s) ss.

insert

(s);

這是我現在用的輸入,之前用的輸入是

while

(getline

(can,s)

) ss.

insert

(s);

2、最主要的超時問題:find函式查詢集合中元素的問題:

if

(ss.

count

(s2)

&&ss.

count

(s3)

)

這是現在我用的,之前用的是:

f

(find

(ss.

begin()

,ss.

end(

),s2)

!=ss.

end()&&

find

(ss.

begin()

,ss.

end(

),s3)

!=ss.

end())

find函式能用count代替的盡量代替

3、學到的substr()函式:

s2=s1.

substr(0

,i);

表示從0的位置截取出i個元素放入新的串裡。

s3=s1.

substr

(i);

表示從i的位置擷取到串的末尾放入新的串裡。

4、注意:set不可以排序,內部就是預設的字典序

5-6對稱軸

1、multimap的使用:

首先設定迭代器

multimap<

int,

int>

::iterator m;

然後對特定元素個數進行統計:

int b=

int(f.

count

(*it)

);

這裡的*it是集合中的元素,需要統計出這一元素對應的個數作為迴圈條件使用。

然後對特定元素進行查詢

m=f.

find

(*it)

;

最後提取出該元素對應的second量,即橫座標

for

(int k=

0;k!=b;k++

,m++

)

具體細節可以參考:

以及:這些是multimap用法比較好的參考資料

5-7列印佇列

1、vector中的最大值的提取

int maxn=

*max_element

(s.begin()

,s.end()

);

2、vector的begin()是乙個迭代器,vector的第乙個元素可以用s[0]或者s.front()進行提取

3、使用對稱操作來應對具有特殊標記的問題

4、利用count函式代替find減少時間

if

(count

(ss.

begin()

,ss.

end(),

-1)==

0)

演算法競賽入門經典第五章

例 5.1.3 週期串 fgets str,max,stdin scanf s str fgets 函式執行後,str會讀到 n 符號停下,也就是提取一行,n 也被讀進字串,因此strlen str 會比原本輸入的字串多乙個 除了一種很特殊的情況,讀入一行時,只一行並不是以 n 結束,而是以eof結...

演算法競賽入門經典 第五章 6174

假設你有乙個各位數字互不相同的四位數,把所有數字從大到小排序後得到a,從小到大排序後得到b,然後用a b替換原來這個數,並且繼續操作。例如,從1234出發,依次可以得到4321 1234 3087,8370 378 8352,8352 2358 6174,有趣的是,7641 1467 6174,回到...

演算法競賽入門經典 第五章錯位輸出

include char s 1234567890 qwertyuiop asdfghjkl zxcvbnm,int main return 0 記錄下標還可以當條件滿足的時候退出,這樣迴圈變數就一定是符合要求d 的下標值 要是我我會這麼寫 include char s 1234567890 qwe...