知識點)
1.B2004這道題主要考輸出格式常見考點保留指定小數位數cout fixed setprecision(3) x endl;數字按固定寬度輸出不足補前導零或空格cout setfill(0) setw(4) num endl; // 輸出 0012cout setfill( ) setw(4) num endl; // 輸出 12右對齊cout left setw(4) num endl; // 輸出 12 左對齊setw 僅對下一個輸出項有效每次都需要設置。setfill 和 left/right 是持久的。以八進制、十六進制形式輸出可能要求帶前綴如 0x或不帶。int a 255;cout hex a endl; // 輸出 ffcout showbase hex a endl; // 輸出 0xffcout uppercase a endl; // 輸出 0XFFcout dec a endl; // 恢復十進制科學計數法與定點小數double x 123.456;cout scientific x endl; // 輸出 1.234560e02cout fixed x endl; // 輸出 123.4560003.B2147這題用到了第一題的setprecision同時還用到了數學函數這里補充一下關于setprecision的知識同時回顧一下常見的數學函數吧setprecision(n)當setprcision(n)不與fixed / scientific連用時表示n位有效數字整數位也在其中當setprecison(n)與fixed / scientific連用時表示精度為n位也就是保證n位小數常見的數學函數5.P1226 【模版】快速冪快速冪的作用是快速求出ab的值實現思路可以看這道題的題解講的非常好這里我把代碼放上來用于快速回顧#includeiostreamusingnamespacestd;intmain(){longlonga,b1,p;cinab1p;longlongans1,basea,bb1;//初始準備//ans是最終答案base是權值初始是底數的1次方while(b!0){//關鍵1b二進制右移直到為0if(b1){//關鍵2當b末位為1時ansans*base%p;//乘上權值記得取模//關鍵3(AB) mod b (A mod b B mod b) mod b//(A×B) mod b ((A mod b) × (B mod b)) mod b}basebase*base%p;//關鍵4因為右移權值進位b1;//記得右移且賦值}printf(%ld^%ld mod %ld%ld\n,a,b1,p,ans);return0;}6.B3860類似讀完論文參考文獻的題主要考察遞歸以及去重條件這題去重可以用set容器和bool數組標記法以后遇到類似的可以參考這倆個思路我看答案沒遞歸用的雙端隊列deq和set也是不錯的思路這題可以回顧一下輸入輸出解綁加速加速輸入輸出流//1ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);//2可以用0替換這兩個關鍵字ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);使用前為了保證 C 的 cin/cout 與 C 的 printf/scanf 可以混用且輸出順序正確標準庫會讓兩者保持同步這導致 cin/cout 在每次操作時都要額外檢查并刷新緩沖區效率較低使用后cin/cout 獨立使用自己的緩沖區不再與 C 流同步速度會顯著提升可能快幾倍甚至幾十倍。但代價是不能混用 cin/cout 和 printf/scanf否則輸出結果可能亂序或丟失7.P1162染色題考的是搜索我的做法是把正方形輸入到(1,1)~(n,n)然后外面再加一圈0從(0,0)開始搜索把所有遇到的外圍0改成2現在我看到了另一種做法思路是遍歷矩陣的每個格子當遇到一個未被訪問的 0 時啟動一次 DFS。DFS 會將該格子及其所有相鄰的 0上下左右標記為一個獨立的連通區域并為該區域分配一個唯一的 id從 3 開始遞增。同時DFS 還會判斷該區域是否觸及矩陣邊界如果搜索過程中遇到邊界越界則返回 false表示該區域連通到了外部不被完全包圍。如果遇到 1 或已經標記過的同區域格子則返回 true表示該方向被障礙或已訪問區域阻擋。通過邏輯與組合四個方向的返回值只要有一個方向觸及邊界最終結果即為 false。感覺還是我的方法簡單8.P1010題意是把數字拆成如13152102825212(2(22(0))2)2(2(22(0)))2(2(2)2(0))22(0)的形式我用的是二進制右移找到所有的2n再遞歸分解n拼接字符串遇到了一個查了好久的bug運算符優先級低于復習一下運算符優先級吧順便運算符優先級我看題解的思路是用pow和log2函數寫的我這個其實更偏向于不會用數學函數寫出來比較繞的答案貼上大佬代碼膜拜一下#includeiostream//不解釋#includecmath//其中有log2(x)和pow(x,y)函數具體作用往下看usingnamespacestd;voiddivide(intx){boolflagfalse;//...判斷是否是第一個如果是的話就不輸出加號while(x!0){inttint(log2(x));/* log2(x)這個函數求以2為底x的對數例如log2(8)返回3因為2^38 而這里把返回值強制轉換為int是為了找到離x最近又小于x的能表示為2^k的數 例如int(log2(137))就能返回7而2^7128恰為離137最近的能表示為2^k的數 */if(flag)cout;//開頭不輸出加號if(t1)cout2;//如果這一項是1輸出2不遞歸elseif(t0)cout2(0);//如果這一項是0輸出2(0)不遞歸else{cout2(;divide(t);//遞歸一層把括號里的數分解輸出cout);}x-pow(2,t);//繼續處理下一項flagtrue;}}intmain(){intn;cinn;divide(n);return0;}log2函數計算以 2 為底的對數C11 起x 必須 0注意本題用了log2強制轉成了intdoublelog2(doublex);floatlog2(floatx);longdoublelog2(longdoublex);doublelog2(IntegralType x);// 整型參數會轉換為 double