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...