競賽中的快讀與涉及字元輸入吃空與格回車的解決方法

2021-08-21 09:27:20 字數 1171 閱讀 2221

在c++中 cin 的讀入效率是很低很低的,一般我們可以用scanf,

但有時一些**題也會tle,比如noip2011 道路修建,讀入資料超大的,

所以我們可以用快速讀入(貌似只能讀數字tat……)

輸入字元轉換成數字,效率高,在輸入資料量特別大的時候採用快速讀入可以避免超時

當然正負可以保證。

inline

int read()

或者

inline int

read()

while(c<='9'&&c>='0')

return k*f;

}

今天做noip2017d1t2被io框架搞了四個小時沒除錯出來,thsh告了乙個好辦法,記一下。

在這道題中涉及一種輸入先是int,然後是時間複雜度o(n^x)或者是o(1)這裡的空格很容易就被char給吃掉,所以我寫的是

int l,q;                        //q是輸入的時間複雜度,0為o(1),非零時x為o(n^x) 

char t,kk; //輸入用快取

cin>>l; //輸入行

scanf("%c",&kk); //吃回車

scanf("o(%c",&t); //輸入複雜度,注意scanf的妙用

if(t=='1')//o(1)

else

scanf("^%d)",&q); //複雜度輸入結束

大佬thsh告訴蒟蒻lkr

1.cin/cout別用,太慢!

2.scanf/printf不要用%c,太危險!同理也不要想著利用c裡scanf的語言特性進行過濾

那怎麼辦呢?

用%s!

%s是處理陣列的,當然也可以處理字元陣列,但是他可以想讀取int一樣遇到空格,回車,換行就停下來,就像scanf%d一樣穩!

於是對陣列進行乙個解析即可,附上記錄方便複習:

演算法競賽中的輸入輸出框架

include define inf 10000000 輸入一些整數,求出它們的最小值 最大值和平均值 保留3位小數 輸入保證這些 數都是不超過1000的整數。標準輸入輸出 int main if x max n printf d d 3f n min max,double s n return 0...

字串的輸入與輸入

一 使用陣列的方法 缺點 不能接受含有空格的字串 char s 1000 scanf s s printf s s 先定義字元變數s 用char s表示 然後在定義變數s後面加上,裡面寫上資料大小。一般沒告訴資料範圍,資料一般開1000就行。例如,資料是100,我們開110就行。然後用輸入和輸出函式...

SQLSERVER中的邏輯讀與物理讀

在使用set statistics io on語句來統計sql語句或儲存過程的i o的時候,sqlserver會顯示邏輯讀與物理讀,那麼邏輯讀與物理讀是什麼意思呢?表 systempara 掃瞄計數 1,邏輯讀取 2 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0...