柚子快報激活碼778899分享:藍橋杯備賽(C/C++組)
柚子快報激活碼778899分享:藍橋杯備賽(C/C++組)
README:
本筆記是自己的備考筆記,按照官網提綱進行復習!適合有基礎,復習用。
一、總考點
????????
試題考查選手解決實際問題的能力,對于結果填空題,選手可以使用手算、軟件、編程等方法解決,對于編程大題,選手只能使用編程解決。選手可在 C 語言程序中使用標準 C 的庫函數(shù), 在 C++語言程序中使用標準 C++的庫函數(shù)(包括 C 庫、STL 等)。
????????考查范圍(
計算機算法
)包括:
????????枚舉、排序、搜索、計數(shù)、貪心、動態(tài)規(guī)劃、圖論、數(shù)論、博弈論*
、概率論
*
、計算幾何*
、字符串算法等。 數(shù)據(jù)結構:數(shù)組、對象/
結構、字符串、隊列、棧、樹、圖、堆、平衡樹
/
線段樹、復雜數(shù)據(jù)結構
*
、嵌套數(shù)據(jù)結構*等。(標*的部分只限于 C/C++研究生組、C/C++大學 A 組)
二、分模塊(可略過)
1.枚舉
????????我們學習過單例模式,即一個類只有一個實例。而枚舉其實就是多例,一個類有多個實例,但實例的個數(shù)不是無窮的,是有限個數(shù)的。例如開車的方向有幾種:前、后、左、右。我們稱呼枚舉類中實例為枚舉項!
做題思路:使用枚舉的方法得到所有滿足要求的表達式,計算每一個表達式的結果并選出結果。
2.排序
見另一個博客:算法設計與分析(實驗一)-CSDN博客
3.搜索(bfs,dfs)
寬度優(yōu)先搜索:BFS寬度優(yōu)先搜索例題(藍橋杯)——逃跑的牛-CSDN博客
深度優(yōu)先搜索:
4.貪心(顧名思義)
5.模擬
6.二分
7.DP(普通一維問題)
dp:動態(tài)規(guī)劃,下面這個博主寫的非常好!
算法之動態(tài)規(guī)劃總結(11種DP類型,70道全部搞懂)-CSDN博客
(經典dp題)最長增序列問題思路:
首先初始化dp[]=1;
從第一個元素遍歷i,第二層循環(huán)該元素之前的元素j,若存在某兩個i,j 存在遞增關系,則dp[i]=max(dp[j]+1,dp[1]);
? 8.高精度
算法講解之高精度算法 - 知乎
三、速成課筆記
藍橋杯速成課鏈接:bilibili
1.頭文件
萬能頭文件:
#include
using namespace std;
注:C++標準程序庫中的所有標識符都被定義于一個名為std的namespace中。
2.vector向量
(0)頭文件
#include
//#include
(1)定義
// vector
vector
vector
(2)存儲
//錯誤存儲方法:vi[i]=i;(此時vi[i]為空)
vi.push_back(i);
(3)訪問
// VectorName[index] 坐標從0開始
cout<<"vi[0]="< //迭代器 vector for(;it!=vi.end();it++) cout<<*it<<" "; (4)操作 返回最后一個元素: vi.back(); 返回第一個元素 vi.front(); 清空向量 vi.clear(); 判空 vi.empty(); //空則返回ture(cout結果為1),不空則返回false(0) 插入 vi.insert(vi.begin()+1,5); ?元素個數(shù) vi.size(); 當前容量 vi.capacity(); //返回a在內存中總共可以容納的元素個數(shù) (如圖所示:當插入一個元素時,若容器的容量不夠,則自動增加一個容量,若刪除一個元素,容量大小不變。) 刪除 vi.pop_back();//刪除最后一個元素 vi.erase(it);//刪除指定迭代器位置元素 更詳細的vector用法:C++ vector的用法(整理)-CSDN博客 3.set容器 特點:自動排序,元素不重復 (0)頭文件 #include (1)定義 //set set (2)訪問 不能通過下標訪問!用迭代器訪問(迭代器在后面中講到) cout<<"set 中的第一個元素是 :"<<*s.begin()< (3)最大容量 s.max_size(); 最大容量大小與硬件有關(增刪不變)。 (4)存儲 s.insert(i); (5)操作 清空向量 s.clear(); 判空 s.empty(); //空則返回ture(cout結果為1),不空則返回false(0) 元素個數(shù) s.size(); find() set if(s.begin()==s.end()) cout<<"s.begin()==s.end()"< cout<<*s.begin()<<" "<<*s.end()< s.insert(1); s.insert(2); s.insert(3); s.insert(4); cout<<*s.begin()<<" "<<*s.end()< cout<<*s.find(0)< 在上面這個代碼鐘,,輸出結果如下: (1)s.begin()==s.end() (2)0 0? (3)1 4? //注意!這里的4不是最后一個元素的4,而是容器元素個數(shù)4 (4)4 //因為沒有找到0元素,故返回的是迭代器:s.end() 而這個位置存儲的是元素個數(shù)4 更多內容見:set容器迭代器及find()函數(shù) 對比set和vector的用法 兩個stl的語法對照 vectorset添加v.push_back()s.insert()刪除v.pop_back() 或 v.erase()s.erase(it)第一個元素v.front() 或 *s.begin()*s.begin()最后一個元素v.back() 或?*s.end()*s.end()數(shù)量size()判空empty() 注意: ????????容器存入數(shù)據(jù)時相當于復制,不是引用。? 4.隊列 (bfs常用到) push() 在隊尾插入一個元素 pop() 刪除隊列第一個元素 size() 返回隊列中元素個數(shù) empty() 如果隊列空則返回true front() 返回隊列中的第一個元素 back() 返回隊列中最后一個元素 5.string (1)按char訪問 string str="about"; cout< cout< (2)加 string str2="abc",str3="efg"; cout< 加法=拼接操作 (3)另一種拼接——append() string s1="abc" string s2="123" 1. s1.append(s2,2) 結果:abc3 [這里的2是pos下標從0開始] 2. s1.append("123",2) 結果: abc12 [這里的2指的是從坐標0開始的兩個字符] 3. s1.append("123") 結果: abc123 (4) 子串:需要連續(xù),如{abdgfr}的子串有abd,dgfr等子序列:不需要連續(xù),只需要保持元素間相對有序。如 {abdgfr}的子序列有adf,bgf等 6.樹 先序遍歷、中序、后序方法:遞歸or棧 赫夫曼編碼: 加權路徑長度WPL: 7.圖 四、常用知識? 1、萬能頭文件 #include 2 、取消同步 ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); 3、數(shù)據(jù)類型 4、去尾 cout< 結果:6 5、輸出(C) printf("%m.nf",num):輸出浮點數(shù),m為寬度,n為小數(shù)點右邊數(shù)位 6、排序 (1)sort sort(begin,end,cmp); 其中: begin為指向待排序的數(shù)組的第一個元素的指針 end為指向待排序的數(shù)組的最后一個元素的下一位置的指針 cmp為可選參數(shù)(默認升序) 降序: (2)類對象排序sort 《重載運算符》 class Student{ //類對象排序函數(shù) friend bool operator <(Student &a,Student &b) { return a.score!=b.score?a.score } }; sort(stu,stu+n); //執(zhí)行排序操作 類對象排序: class item { public: int type_A;//類成員參數(shù)A int type_B;//類成員參數(shù)B }; bool cmpA(const item& x,const item& y) { return x.type_A < y.type_A; } bool cmpB(const item& x, const item& y) { return x.type_B < y.type_B; } 柚子快報激活碼778899分享:藍橋杯備賽(C/C++組) 精彩內容
本文內容根據(jù)網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。