oj的一些技巧。

2021-09-28 14:33:34 字數 832 閱讀 3977

有關卡常的oj經驗:

1,常用的c++輸入輸出中,cin/cout(包括getline(cin,str)…)>scanf/printf>getchar()/putchar();使用這種方法,在資料量較大時(百萬次運算以上),能有較大的優化,cin、cout比scanf和printf慢了幾百ms甚至上千ms,原因在於cin和cout要時刻和stdin和stdout同步,即和printf,scanf同步,因此

有一定的開銷,此時,可以呼叫ios::sync_with_stdio(false);來取消二者的同步,此時可能會導致出錯,但cin和cout的效率就公升高了。getchar和putchar效率比較高的原因是一次僅僅對乙個字元進行處理。而printf和scanf中的「%d」等字串的匹配和識別也有一定的開銷,會導致其速度比較慢。因此,如果希望有高效的輸入輸出,就使用getchar和putchar。

2.常用的一些類和模板也有一定的缺點,譬如,在使用string時,它的記憶體會占用更多,同時,如果要呼叫length等函式,也會有很大的開銷。因此,能使用char就不使用string,能使用陣列,就不使用vector。同時,在對函式傳參時,可以傳入乙個char的元素,但是在函式中的形參以string形式出現,這樣,僅僅在該函式中,char*保留有string的特性。

3,在使用new時,消耗的時間是使用建立陣列的100倍,因此,在需要建立鍊錶等的時候,可以先建立乙個陣列,每次需要new時就直接從陣列裡面取位址。

4. 對於動態規劃,如果後一行可以由前一行和該行得出,那麼可以使用只有兩行的陣列,來儲存動態規劃的結果。

5. 對於鍊錶,有時也可以使用陣列對其進行模擬,但是,是用這種方式的速度可能沒有原來那麼快,因為指標更底層,通過指標引用來獲取資料更快。

android UI 的一些技巧

一 去掉edittext的背景顏色 android background null 二 listview 修改某行的值,因為一些功能邏輯,需要修改listview某行的值,那麼就可通過下面的方法,獲取到對應的listview的某行,然後修改。private void updateview int i...

MySQL的一些技巧

使用rand 獲取隨機結果 在order by語句中可按照如下的隨機順序檢索資料行 mysql select from tbl name order by rand order by rand 同 limit 的結合從一組列中選擇隨機樣本很有用 mysql select from table1,ta...

VIM 的一些技巧

vim配置檔案 vimrc 如果沒有自己建立乙個即可 filetype plugin indent on 開啟外掛程式 set number 顯示行號 syntax on 語法高亮 set cindent set transparency 15 透明度 set guioptions aace 去掉 ...