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