ACM錄 之 輸入輸出。

2022-08-02 09:30:13 字數 2511 閱讀 9500

—— 簡單介紹一下acm裡面的輸入輸出。。。

—— 主要說c++的輸入輸出(其實其他的我不會。。。)。

—— c++裡面有輸入輸出流,也就是cin和cout,用起來也算是比較方便吧。。。

—— 但是,acmer好像不怎麼用這個,大都用scanf,printf這兩個不是很方便的c語言遺留輸入輸出函式,因為。。。

—— 大家都用的cin cout逼格太低了,是吧。。。

—— 餓,開個玩笑,其實是因為效率的問題了,c++是相容c語言的,為了相容scanf和printf這些老一輩的輸入輸出,所以他很貼心的,讓cin和cout這種輸出輸出流的**裡面多了乙個步驟,就是檢查scanf和printf的緩衝區,防止出現cin和scanf兩種同時用的時候導致的混亂。。。

—— 但是。。。如此貼心的關懷是要付出代價的,就是時間。。。之後會測試一下時間差距。。。

—— 先來說說scanf和printf。。。

然後關於acm裡面的輸入輸出,請看 點我點我 。看看這篇就差不多了。。。

至於還有一些比較坑爹的輸入輸出要求的話就需要發揮大家的智慧型了。。。

—— 當面對很多很多資料要輸入或者輸出的時候,兩者所消耗的時間差距很大很大。。。那麼下面做個實驗吧。

首先先生成乙個txt檔案,裡面有10000000個數,然後寫個程式分別使用cin和scanf測試一下讀入這些數的速度。(通過作業系統的管道可以直接讀取檔案,之後說。)

首先試試cin。

**如下:

#include #include 

#include

using

namespace

std;

intmain()

然後執行一下輸出的是 4104488 us,也就是4秒多,就能讀完這10000000個數。

然後再試試scanf:

#include #include 

#include

using

namespace

std;

intmain()

輸出 1201028us,也就是1秒多。。。

餓,這我不用多說了吧,哪個快哪個慢。。。

—— 在acm的題目裡面是有時間限制的,也就是要求程式必須在規定時間內執行完,所以說**當然是越快越好了。。。

—— 當然對於輸出或者輸出量比較小的,這兩個就無所謂了,但是如果對於很多資料的輸入輸出。。。那麼,用哪個就不多說了。。。

—— 其實cin和cout是可以逆襲的,因為他們要貼心的檢查緩衝區,所以才很慢,那麼不讓他檢查不就完了。

—— 是的,是有**可以關掉緩衝區檢查的,下面來實驗一下。

**如下:

#include #include 

#include

using

namespace

std;

intmain()

輸出的時間是 1102463 us,果然。。。逆襲成功了。。。成功了。。。

—— 但是這裡要注意一些問題,使用了上面那句**之後,千萬不要再用scanf和printf,千萬不要再用scanf和printf,千萬不要再用scanf和printf。

—— 因為這時cin和cout可能會和printf他們不同步了,可能輸出的順序會混亂,這樣連死都不知道是怎麼死的。。。

—— 另外就是這句話不是萬能的,可能會不管用,親身體驗,血一樣的教訓,有一道題目不管怎麼改都超時,直到。。。改成scanf,就好了。。。然後,從此再也不用那句話了,改成一定用scanf和printf了。

—— 當然了如果不是acm的話還是用cin和cout吧,畢竟他們年輕。。。據說更安全。。。

—— 關於檔案輸入輸出。

—— 那些開啟檔案然後讀的就不說了,畢竟比較麻煩。說個省事的。。。

—— freopen函式,重定向函式,一般acm裡面是這樣用:

freopen("

in.txt

","r

",stdin);

freopen(

"out.txt

","w

",stdout);

—— 第乙個表示用 r (read)的方式開啟 in.txt 檔案,然後把 stdin 重定向到 in.txt 這個檔案,也就是在之前的時候 stdin(標準輸入)是鍵盤,之後標準輸入就是那個檔案了,所以每次cin就不是從鍵盤讀入了,而是從那個檔案。

—— 第二句同理。。。把標準輸出重定向。。。就不輸出到螢幕而是那個檔案了。。。

—— 這裡注意這樣幹只是方便自己除錯,比如輸入的資料很多,乙個個手打太慢了。。。提交上去之前千萬記得刪掉或者注釋掉,因為大部分題目要求的是標準輸入輸出。

—— 然後還有一種重定向,是關於作業系統的,acm的判題機其實就是用的這個,機器把你提交的**重定向到某個資料檔案,然後輸出也重定向到另乙個檔案,然後執行程式,然後執行完成的時候比較輸出檔案和正確的輸出檔案有沒有不同,有的話就是不對,沒有就是對了,所以寫的程式每讀入一組資料算出結果然後輸出就行,不用一次性把所有資料讀入。。。

輸入輸出想的起來的差不多就這些。。。

ACM入門之輸入輸出

include stdio.h int main 在開始做 acm時,會面臨乙個輸入輸出資料的問題,acm裡的輸入輸出資料和平時寫的程式不大一樣。下面詳解 acm有關輸入輸出的問題。一 輸入 1 只有一組測試資料,這時候是最簡單的了,請看題目 sdutoj1000。c語言 include stdio...

ACM輸入輸出之python

python的輸入數野生字串,需要自己轉型,常用的轉型函式有 strip 將兩端的空白字元去掉,返回str slipt 將字串用空白字元分開,返回 str map 把list裡面的值對映到指定型別,返回 type isspace 是否用空行組成 eof用來抓異常 輸出加 不換行 python3不能用...

acm 輸入輸出總結

資料的輸入格式影響判斷迴圈終止的方式,迴圈判定發生在各組資料之間的輸入過程中和組內單個資料的輸入過程中,常見的資料輸入格式有三種 給出輸入規模 首先,輸入乙個整數n,n為輸入規模 然後,輸入n組資料。以特定輸入標誌結束 最後一組輸入為題目中指定的一組特定輸入,標誌輸入的結束。這組輸入一般為一組無意義...