青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

This blog has been shut down permanently.

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  13 隨筆 :: 0 文章 :: 25 評(píng)論 :: 0 Trackbacks

1.輸入輸出

ACM和TopCoder不同,TopCoder只用讓參賽者寫(xiě)一個(gè)class,而ACM需要參賽者完成整個(gè)console程序.在TopCoder中,輸入輸出是通過(guò)parameter傳遞的,不用過(guò)多考慮,在ACM中,卻需要自己編寫(xiě).

(1).只有一組輸入時(shí),這種情況不用我說(shuō)了,都會(huì),但是通常也不會(huì)有這么水的題

(2).固定組數(shù)的輸入,可以利用一個(gè)計(jì)數(shù)器和while語(yǔ)句完成,

01 #include <iostream>
02
03 int main(void){
04     int n;
05     scanf("%d", &n);
06     while (n--){
07         //...
08     }
09     //...
10     return 0;
11 }

(3).測(cè)試數(shù)據(jù)結(jié)尾有標(biāo)志字符(例如最后一組輸入后給一個(gè)0),這個(gè)只用加一個(gè)if語(yǔ)句判斷讀入的數(shù)據(jù)是什么,是結(jié)束標(biāo)志跳出就ok了.也不多說(shuō)了

(4).題目沒(méi)有告訴你有多少組數(shù)據(jù),這個(gè)通常是最令新手疑惑的,這種情況,一般用文件結(jié)束標(biāo)志EOF判斷

01 #include <iostream>
02
03 int main(void){
04     int n;
05     while (scanf("%d", &n) != EOF){
06     //...
07     }
08     //...
09     return 0;
10 }

其實(shí)這里也可以用c++的cin輸入流判斷,例如

01 #include <iostream>
02
03 using namespace std;
04
05 int main(void){
06     int n;
07     while (cin>>n){
08     //...
09     }
10     //...
11     return 0;
12 }

但是這樣不是特別好,為什么?下面會(huì)說(shuō).

對(duì)于輸出,最好采用的接收一組數(shù)據(jù),處理一組數(shù)據(jù),把結(jié)果保存在一個(gè)緩沖數(shù)組中,待所有輸入結(jié)束后,再一起輸出,而不是待接收完所有輸入后,再處理,再輸出,這樣會(huì)消耗更多的memory,而且會(huì)更慢.

2.關(guān)于效率

第一,上面的所有例子,均采用的c標(biāo)準(zhǔn)I/O,為什么不用c++的cin,cout呢?是有原因的,經(jīng)實(shí)踐,在大規(guī)模輸入輸出下,cin,cout效率遠(yuǎn)遠(yuǎn)低于scanf()和printf(),原因據(jù)我估計(jì)應(yīng)該是以為scanf(),printf()是匯編寫(xiě)的(這點(diǎn)可以從這兩個(gè)函數(shù)均可以接受任意多組parameter(s)看出,c/c++函數(shù)是不具備這樣的性質(zhì)的),而cin,cout均是直接c/c++寫(xiě)的流操作,本來(lái)c/c++就比匯編慢,還引入流,所以自然比scanf(),printf()慢了.因此,在輸入輸出數(shù)據(jù)量很小的情況下,出于方便的原因,可以采用cin,cout,而在輸入輸出數(shù)據(jù)量比較大的情況下用scanf(),printf()比較保險(xiǎn),避免超時(shí).

第二.ACM中,除了c/c++,一般還支持java等語(yǔ)言,但是由于java是解釋執(zhí)行的,效率十分低下,為此,一般的JudgeOnline都把java的time limit設(shè)置為題目給定值(也就是c/c++的time limit)的三倍,而且給每一組輸入再額外提供150ms.即使是這樣,java遇上復(fù)雜或者高精度計(jì)算的題目,還是很容易超時(shí),因?yàn)樾视袝r(shí)候還遠(yuǎn)遠(yuǎn)未到c/c++的1/3.因此,一般來(lái)說(shuō),除了個(gè)別java極其有利的情況(例如字符串處理),不建議使用java.

3.關(guān)于所得結(jié)果的解釋

下面是一般JudgeOnline系統(tǒng)所有可能產(chǎn)生的結(jié)果,如果對(duì)返回的結(jié)果不明,看看解釋吧

Waiting: Your program is being judged or waiting to be judged.

Accepted (AC): Congratulations! Your program has produced the correct output!

Presentation Error (PE): Your program's output format is not exactly the same as required by the problem, although the output is correct. This usually means the existence of omitted or extra blank characters (white spaces, tab characters and/or new line characters) between any two non-blank characters, and/or blank lines (a line consisting of only blank characters) between any two non-blank lines. Trailing blank characters at the end of each line and trailing blank lines at the of output are not considered format errors. Check the output for spaces, blank lines, etc. against the problem's output specification.

Wrong Answer (WA): Your program does not produce the correct output. Special judge programs will possibly return Wrong Answer in place of Presentation Error for simplicity and robustness.

Runtime Error (RE): Your program has failed during the execution. Possible causes include illegal file access, stack overflow, out of range in pointer reference, floating point exception, division by zero and many others. Programs that stay not responding for a long time (not consuming CPU cycles) may also be considered to have encountered runtime errors.

Time Limit Exceed (TLE): The total time your program has run for has exceeded the limit.

Each problem has two time limits - TOTAL TIME LIMIT and CASE TIME LIMIT. The former is the total time allowed for your program to deal with all input files. And the latter is the total time allowed for your program to deal with a single input file. Exceeding either one will lead to Time Limit Exceed. If you get Time Limit Exceed but find that your program has run for less time than is limited, your program must have exceeded that CASE TIME LIMIT.

Problems without a special demand on the time limit for a single input file will have its case time limit is trivially set as the same as its total time limit and the phrase "Case Time Limit" will not show up under the problem title.

Memory Limit Exceed (MLE): The maximum amount of memory that your program has used has exceeded the limit.

Output Limit Exceed (OLE): Your program has produced too much output. Currently the limit is twice the size of the file containing the expected output. The most common cause of this result is that your programs falls into an infinite loop containing some output operations.

Compile Error (CE): The compiler fails to compile your program. Warning messages are not considered errors. Click on the judge's reply to see the warning and error messages produced by the compiler.

No such problem: Either you have submitted with a non-existent problem id or the problem is currently unavailable (probably reserved for upcoming contests).

System Error: The judge cannot run your program. One example is that your program requires much more memory than hardware limitation.

Validate Error: The special judge program fails in checking your output, which means it may contain some bugs. If you get this result, please contact the administrator. (Of course, this also means your output is probably wrong).

posted on 2009-11-11 00:43 iZ 閱讀(1855) 評(píng)論(11)  編輯 收藏 引用

評(píng)論

# re: [轉(zhuǎn)載]ACM技巧——for amateur only 2009-11-11 03:17 OwnWaterloo
"經(jīng)實(shí)踐,在大規(guī)模輸入輸出下,cin,cout效率遠(yuǎn)遠(yuǎn)低于scanf()和printf()"
遠(yuǎn)遠(yuǎn)低于? 太夸張了……
野蠻人拿到打火機(jī)可能也會(huì)抱怨"還不如我的木頭"。

看看這個(gè):
http://acm.pku.edu.cn/JudgeOnline/problemstatus?problem_id=2602

第1個(gè)uther的,就是用C++ iostream做的。

  回復(fù)  更多評(píng)論
  

# re: [轉(zhuǎn)載]ACM技巧——for amateur only 2009-11-11 19:16 iSsay
@OwnWaterloo
uther只是預(yù)處理包含了流處理的定義,但是他有沒(méi)有調(diào)用cin/cout那我就不知道了。  回復(fù)  更多評(píng)論
  

# re: [轉(zhuǎn)載]ACM技巧——for amateur only 2009-11-11 19:19 iSsay
@OwnWaterloo
換句話說(shuō),說(shuō)不定他預(yù)先包含的是iostream,里面用的都是匯編代碼呢
:-)  回復(fù)  更多評(píng)論
  

# re: [轉(zhuǎn)載]ACM技巧——for amateur only 2009-11-11 20:30 OwnWaterloo
@iSsay
少扯了,uther是我臨時(shí)注冊(cè)的馬甲。

  回復(fù)  更多評(píng)論
  

# re: [轉(zhuǎn)載]ACM技巧——for amateur only 2009-11-11 21:12 iSsay
@OwnWaterloo
我有眼不識(shí)泰山,大牛啊,能看看你的代碼嗎?  回復(fù)  更多評(píng)論
  

# re: [轉(zhuǎn)載]ACM技巧——for amateur only 2009-11-11 21:26 OwnWaterloo
@iSsay
就事論事而已,我不是大牛,pku上就沒(méi)過(guò)幾道題。
代碼里面有很多速度測(cè)試的代碼,所以很長(zhǎng)。

其實(shí)是用istream::read 一次讀完所有輸入到buf。
將buf[0],buf[2],buf[4], ... 看作a
將buf[1],buf[3],buf[5], ... 看作b
然后高精度加高精度。
加法時(shí)沒(méi)有沒(méi)有轉(zhuǎn)換到0-9 直接用'0'-'9'計(jì)算,輸出時(shí)也省去了另一次轉(zhuǎn)換,直接輸出一個(gè)字符串。

  回復(fù)  更多評(píng)論
  

# re: [轉(zhuǎn)載]ACM技巧——for amateur only 2009-11-11 23:02 iSsay
你有沒(méi)有試過(guò),用測(cè)速代碼測(cè)試iostream,和標(biāo)準(zhǔn)IO的效率?  回復(fù)  更多評(píng)論
  

# re: [轉(zhuǎn)載]ACM技巧——for amateur only 2009-11-11 23:05 OwnWaterloo
@iSsay
標(biāo)準(zhǔn)IO?cin,cout,cerr,clog不就是標(biāo)準(zhǔn)IO么?

你指的是formatted io?

  回復(fù)  更多評(píng)論
  

# re: [轉(zhuǎn)載]ACM技巧——for amateur only 2009-11-12 00:08 OwnWaterloo
@iSsay
這個(gè)嘛,你去測(cè)吧,嘿嘿。


做2602的背景是這樣的:chinaunix上有人說(shuō)poj上有題目建議使用scanf/printf,否則做不出來(lái)。
然后我就去試了試。 先隨便在網(wǎng)上扒了一份代碼,TLE……
干脆自己寫(xiě),用g++提交,結(jié)果就過(guò)了,換c++提交,第2次就跳到no1去了。
不過(guò)oj上的時(shí)間測(cè)不準(zhǔn),精度太低。其他人多提交幾次可能也會(huì)沖到no1去。


iostream的格式化是靜態(tài)分派的,printf/scanf是動(dòng)態(tài)分派。
在格式化上,iostream的機(jī)制理論上的效率是會(huì)高而不是低。

iostream輸在格式化后的其他事情上去了。iostream下還有一層client可知的streambuf層次。

iostream多這一個(gè)層次,就將"格式化"與"緩沖"工作分開(kāi)了。
你可以復(fù)用iostream的格式化功能,但給它一個(gè)不同于file的目的地,比如socket、memory、null —— 只要傳遞給它相應(yīng)的streambuf就行。

對(duì)于memory作為目的地,stl提供了stringbuf。并有相應(yīng)的stringstream在iostream上增加一些接口,使得client不用直接操縱stringbuf。
C標(biāo)準(zhǔn)庫(kù)相應(yīng)有sprintf,sscanf。但要這么看,sprintf不能擴(kuò)容。
類似的還有在我最開(kāi)始接觸vector的時(shí)候,也覺(jué)得它慢。因?yàn)槲夷胿ector和固定大小數(shù)組比較。但當(dāng)我不做oj,數(shù)組大小不方便提前計(jì)算出時(shí),怎么辦?
而且,stl其實(shí)還有strstream……

以socket作目的地? printf/scanf怎么搞?
自己實(shí)現(xiàn)printf/scanf嗎? 你覺(jué)得這容易嗎?
如果不自己實(shí)現(xiàn)printf/scanf,那就只能利用緩存。
拿這種情況和iostream + socketbuf比較,那才公平。

iostream還有很多亂七八糟的功能,locale,expcetion,callback,fillchar……

總之,在一個(gè)只處理build-in類型,數(shù)組/緩沖大小可以提前計(jì)算并按最大值提供,不需要按需提供/擴(kuò)展,不處理多語(yǔ)言的情況下 —— OJ的情況下 ——確實(shí)利用不了iostream,vector等提供的功能。
但OJ做多了,就反過(guò)來(lái)說(shuō)它們的不是,就很扯蛋了。
說(shuō)實(shí)話,OJ的代碼普遍是上不得臺(tái)面的,大家自己心里清楚。
根本就沒(méi)有一點(diǎn)點(diǎn)軟件工程的美感在里面。可復(fù)用嗎?不能,都是一次性筷子,完全是為了AC而已。

在實(shí)際開(kāi)發(fā)中,沒(méi)有這么多美好的前提條件。

即使iostream功能比printf/scanf多得多,如果iostream的格式化比printf/scanf有數(shù)量級(jí)的差異,沒(méi)得說(shuō),那肯定是iostream實(shí)現(xiàn)得太爛……
同樣的是格式化和讀寫(xiě)文件操作,多一個(gè)間接層次就導(dǎo)致效率數(shù)量級(jí)的下降?那不是寫(xiě)得爛能是什么呢?找個(gè)好點(diǎn)的吧。
還有用VC6的OJ(非POJ),你能拿它怎么辦呢?

  回復(fù)  更多評(píng)論
  

# re: [轉(zhuǎn)載]ACM技巧——for amateur only 2009-11-12 14:38 OwnWaterloo
好像說(shuō)偏題了……

chinaunix上討論時(shí),他并沒(méi)有說(shuō)是哪一題,只說(shuō)有題目提示說(shuō)要用scanf/printf。他自己也記不清楚是哪一題了。
2602是我自己找出來(lái)的,覺(jué)得這題比較變態(tài)。

如果樓主在做其他題目時(shí),發(fā)現(xiàn)題目下面有提示說(shuō)使用scanf/printf的話,還請(qǐng)通知我一下,謝謝~_~
  回復(fù)  更多評(píng)論
  

# re: [轉(zhuǎn)載]ACM技巧——for amateur only 2009-11-15 16:25 iSsay
@OwnWaterloo
POJ2602上面那道題,可能沒(méi)有體現(xiàn)出printf的優(yōu)點(diǎn)吧。如果加上格式控制就不一樣了。
那個(gè)hint估計(jì)也就是這個(gè)意思,就有點(diǎn)像入門(mén)題,先給你一個(gè)提示,讓你以后做題的時(shí)候考慮到printf。。
  回復(fù)  更多評(píng)論
  


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99精品国产高清一区二区| 亚洲毛片一区| 欧美1区免费| 欧美在线一二三区| 久久久精品国产一区二区三区| 欧美主播一区二区三区美女 久久精品人 | 亚洲三级性片| 亚洲精品1234| 中国亚洲黄色| 亚洲欧美日韩国产成人精品影院| 亚洲一区二区影院| 久久亚洲精品中文字幕冲田杏梨| 女女同性精品视频| 亚洲精品护士| 翔田千里一区二区| 免费日韩av电影| 欧美亚韩一区| 激情另类综合| 亚洲午夜激情网页| 久久综合中文| 中国女人久久久| 久久夜色精品国产欧美乱| 欧美日韩亚洲一区二区三区| 国产视频在线观看一区二区三区| 亚洲欧洲日本在线| 欧美一区二区视频在线观看2020| 欧美电影在线播放| 亚洲一区二区av电影| 久久综合伊人77777尤物| 欧美精品一区二区在线观看| 国产亚洲午夜| 亚洲午夜激情| 亚洲激情婷婷| 久久久精品日韩欧美| 欧美午夜在线视频| 亚洲高清视频一区二区| 亚洲欧美日韩国产一区二区| 鲁大师成人一区二区三区| 亚洲视频在线观看免费| 欧美不卡视频| 精品1区2区3区4区| 香港久久久电影| 日韩亚洲欧美成人| 蜜桃精品一区二区三区| 国模 一区 二区 三区| 亚洲午夜羞羞片| 亚洲欧洲日产国码二区| 久久综合五月天婷婷伊人| 国产三级精品三级| 亚洲线精品一区二区三区八戒| 亚洲第一天堂无码专区| 久久久亚洲人| 在线国产欧美| 免费观看一区| 久久久不卡网国产精品一区| 国产欧美综合一区二区三区| 亚洲一区二区三区国产| 日韩视频在线你懂得| 欧美精品在线看| 亚洲精品专区| 亚洲美洲欧洲综合国产一区| 欧美日韩国产系列| 亚洲网在线观看| 一区二区三区视频在线播放| 欧美日韩国产免费观看| 国产精品99久久99久久久二8| 亚洲精品一区二区三区av| 亚洲午夜久久久| 欧美日韩在线影院| 中文日韩在线| 亚洲——在线| 国产欧美在线播放| 老牛国产精品一区的观看方式| 欧美在线综合| 亚洲精品九九| 一区二区三区不卡视频在线观看| 欧美午夜精彩| 久久激情网站| 狂野欧美激情性xxxx欧美| 91久久精品日日躁夜夜躁国产| 亚洲国产午夜| 国产精品美女www爽爽爽视频| 欧美一级成年大片在线观看| 欧美一级久久久| 亚洲国产色一区| av成人免费| 国内外成人在线| 亚洲黄页视频免费观看| 国产精品xxxxx| 噜噜噜噜噜久久久久久91| 欧美日韩成人在线视频| 欧美一区二区日韩| 免费成人美女女| 午夜国产精品视频| 久久婷婷影院| 亚洲调教视频在线观看| 欧美一区午夜精品| 一本久久青青| 久久精品国产一区二区三区| 99精品免费视频| 久久国产精品72免费观看| 亚洲另类自拍| 欧美中在线观看| 亚洲欧美精品suv| 欧美成人伊人久久综合网| 欧美亚洲免费电影| 女女同性女同一区二区三区91| 亚洲欧美一区二区原创| 美女视频一区免费观看| 久久成人免费网| 欧美日韩另类字幕中文| 免费观看一级特黄欧美大片| 国产精品亚洲网站| 亚洲人成网站777色婷婷| 韩国免费一区| 亚洲永久免费视频| 亚洲午夜电影在线观看| 欧美成人免费在线| 久久综合一区| 国产有码一区二区| 亚洲欧美国产高清| 亚洲午夜精品久久久久久app| 久久综合久久久久88| 欧美专区在线观看| 国产精品久久国产三级国电话系列| 欧美国产日产韩国视频| 黄色综合网站| 久久精品国产精品| 久久久久久久国产| 国产精品美女久久福利网站| 日韩视频精品在线观看| 夜夜嗨av一区二区三区四区 | 国产精品久久久久9999吃药| 亚洲国产日韩一区| 亚洲高清在线精品| 久久视频在线视频| 久久久久久欧美| 国产一区二区三区高清播放| 亚洲中午字幕| 亚洲素人在线| 欧美午夜精品久久久久久久| 日韩天堂在线视频| 亚洲婷婷免费| 国产麻豆91精品| 性色av香蕉一区二区| 久久精品论坛| 在线日韩成人| 欧美刺激午夜性久久久久久久| 亚洲国产精品va在线看黑人| 亚洲剧情一区二区| 欧美精品少妇一区二区三区| 亚洲免费成人av| 香蕉精品999视频一区二区| 国产欧美精品一区二区三区介绍 | 欧美日产在线观看| 99综合视频| 欧美在线在线| 亚洲黄色天堂| 欧美三级韩国三级日本三斤| 在线天堂一区av电影| 欧美在线网站| 亚洲区在线播放| 国产精品jizz在线观看美国| 亚洲欧美日韩久久精品 | 美女脱光内衣内裤视频久久影院| 极品尤物久久久av免费看| 麻豆成人91精品二区三区| 亚洲精品字幕| 久久久www成人免费精品| 亚洲精品韩国| 国产视频自拍一区| 欧美激情中文字幕一区二区| 亚洲夜间福利| 欧美激情一区二区三区| 午夜精品视频一区| 亚洲国产一区二区三区青草影视| 欧美片在线观看| 久久成人18免费观看| 亚洲毛片在线观看.| 久久九九国产精品怡红院| 亚洲国产精品第一区二区三区| 欧美日韩国产一区| 久久久噜噜噜久久中文字幕色伊伊 | 欧美一区亚洲| 日韩一二三区视频| 国产一区二区三区久久| 欧美日韩免费在线视频| 久久久国产精品一区| 一本色道久久综合狠狠躁篇怎么玩| 久久国产66| 亚洲图片在线观看| 亚洲精品在线一区二区| 韩国一区二区三区在线观看| 欧美三级日韩三级国产三级| 久久先锋资源| 欧美在线视频一区| 久久精品国产精品亚洲综合| 亚洲精品视频免费在线观看| 国产综合色精品一区二区三区| 欧美性色aⅴ视频一区日韩精品|