你還在擔心不會用auto寫for迴圈嗎?
你還在擔心map不會用嗎?
你還在為stl的各種庫不會用而苦惱嗎?
相信我,看了這篇文。。
。你依然不會!
題目傳送門—>cf977b two-gram
題目描述:
給你乙個字串,找出現次數最多的長度為2的子串。
輸入樣例:
7abacaba
輸出樣例:
ab這道題可以作為c++ stl庫的優質練手題
1.auto的迴圈遍歷
for(auto x : range)2.string中擷取字串建立拷貝,無法修改range中的元素
for(auto& x : range)
可以修改range中的元素,但一般用這種for(auto&& x : range)
for(const auto & x : range)
唯讀range中的元素
ss.substr(i,k):
這個的意思就是從i開始擷取以k為單位長度的乙個字串,k指代的是長度。
ss.c_str():
這個就是將string字串轉化成為c的字串陣列,而c_str();則是生成乙個const char*型別的指標,指向字串的首位址
#include
#include
#include
using
namespace std;
intmain()
不妨可以試試.
#include
#include
#include
#include
using
namespace std;
intmain()
//遍歷陣列
ans=ss.
substr(0
,2);
for(
auto
&&i:f)
} cout
}
如果map這麼定義:map < string , map < string , int > >
那麼應該:
for(auto&&p:m)
for(auto&&p2:p.second)
下面一道題是關於set的用法
題目傳送門—>cf620c pearls in a row
現在有n個數,你的任務是將這n個數盡可能切割成多段。每一段必須包括兩個相同的數。
資料輸入量比較大,建議使用scanf和printf。
input 單組測試資料。資料第一行為n(1 ≤ n ≤ 3·105) 。
資料的第二行包括n個數ai(1 ≤ ai ≤ 109) 。
output 輸出的第一行為盡可能切割的最大段數k。
接下來k行,每行為兩個整數lj, rj (1 ≤ lj ≤ rj ≤ n) ,表示切割的區間範圍
如果存在多個合法的切割方法,輸出任意乙個即可。
如果不能切割成合法的情況,輸出"-1".
這道題涉及一小部分貪心
首先講一下set:
#include
//標頭檔案
set <
int> st//定義set,我喜歡用st命名
set.
insert
(a)//插入資料
set.
count
(a)//查詢資料是否出現
set.
clear()
//清空
快讀模板
inline
intread()
while
(ch>=
'0'&& ch<=
'9')
return x*f;
}
這道題的思路就是用set找到相同的數字了以後就把這個區間切開,但是本道題**實現相對來說很巧妙,下面請看。
#include
#include
using
namespace std;
set<
int>p;
int l[
1010102
],r[
1010212];
int a[
1021021];
inline
intread()
while
(ch>=
'0'&& ch<=
'9')
return x*f;
}//快讀,常數優化大佬中的大佬,不會的趕緊學一下吧!
intmain()
else p.
insert
(a[i]);
/*if(p.count(a[i])==1)else p.insert(a[i]); **/
///這個是錯的!注釋的部分和答案不一樣的地方在於//}
r[u]
=n;//這個是精髓之處
//比方說1 2 2 2 2 1 3 本來r[1]=6,但是為了讓最後的數字包括上
//就自動賦值讓r[1]=7
if(u==0)
else}}
return0;
}
priority_queue c++ stl庫中的優先佇列標頭檔案:#include 和普通的queue不一樣的地方在於:可以自定義資料的優先順序(權重),讓權重高的排在佇列的前方,優先出隊。本質上是堆的乙個實現。
定義:priority_queuetype 就是資料型別,container 就是容器型別(container必須是用陣列實現的容器,比如vector,deque等等,但不能用 list。stl裡面預設用的是vector),functional 就是比較的方式。
當需要用自定義的資料型別時才需要傳入這三個引數,使用基本資料型別時,只需要傳入資料型別,預設是大頂堆。//公升序佇列,小頂堆(從小到大輸出)
priority_queue q;
//降序佇列,大頂堆 (從大到小輸出)
priority_queue q;
//greater和less是std實現的兩個仿函式(就是使乙個類的使用看上去像乙個函式。其實現就是類中實現乙個operator(),這個類就有了類似函式的行為,就是乙個仿函式類了)
C STL庫中sort函式用法
首先sort函式因為它使用的排序方法是類似於快排的方法,時間複雜度為n log2 n 執行效率較高。所以一般資料量很大的資料排序都可以用它來進行。1 sort 函式的標頭檔案為 include 2 sort函式有三個引數 第乙個是要排序的陣列的起始位址。第二個是結束位址 最後一位要排序的位址 第三個...
bitset用法及應用(C STL庫)
include bitset b b有n位,每位都為0 bitset b u b是unsigned long型u的乙個副本 bitset b s b是string物件s中含有的位串的副本 bitset b s,pos,n b是s中位置pos開始的n個位的副本 eg.1 bitset 8 b 輸出b ...
C STL 用法簡介
感覺類似python的字典 需要 include 定義是map m 如 map mapstudent int 是 key,string是value 是乙個對映關係,可以使用key通過下標訪問,訪問其中的元素。定義了三種型別,插入鍵值對的插入規則 第一種就是直接通過下標插入 mapstudent ke...