循環輸入輸出處理常見問題
1、為什么需要循環輸入輸出:通常來說OJ對於每道題里面有.in和.out文件,分別表示測試數據的輸入和輸出。如果某些編程題的所有數據都只做在一個.in和一個.out中,這樣就會變成多組測試了,所以需要提交的代碼中循環處理。
2、處理方法:其實這個問題可以避免,就是編程題后台每個樣例做一組對應的.in和.out文件,這樣就變成單組測試,代碼就不需要循環處理,但是平時練習的題目質量不一,這個問題都會出現。
代碼里面循環處理了即使是單組測試也會完全沒問題,所以為了偷懶,可以全寫成循環處理。
3、還有一個坑:但是這里會發生一個問題(十分常見!!!!),如果測試數據是多組的,但是恰巧你代碼里面需要些標記數組,map,set等,在循環內一定記得清空,不然可能會產生前面的測試樣例影響了后續數據的答案。
對於各種語言的一些基本知識
做編程題強烈建議使用C/C++,做編程題強烈建議使用C/C++,做編程題強烈建議使用C/C++,做編程題強烈建議使用C/C++
重要的事情比三遍再多說一遍,下面說說具體理由:
1、出題人通常會使用C/C++編寫標程,數據也是由標程制造的,所以使用跟出題人一樣的語言會比較穩妥
3、關於cin cout和scanf printf。做題的時候盡量使用scanf printf。下面告訴一個小常識,不要驚訝:cin cout比scanf printf慢20倍左右!!!!!!!
一旦遇到大數據量,光是讀入就有可能跪掉。
你或許可以使用std::ios::sync_with_stdio(false); 這條語句關掉scanf和cin的同步,加快效率。但是即使這樣cin還要慢5倍左右,而且一旦使用了這條語句,scanf和cin混用可能就會造成一些奇怪的錯誤
4、Java相關:Java整體效率大概比C/C++慢2~3倍,但是Java寫編程題也沒什么問題,主要就是處理好各種輸入輸出的情況。
5、python等等其他語言,做編程題真心不建議使用這些語言,要么效率低下,要么會有些更深的坑。
關於輸出格式
2、換行問題,對於每個樣例,建議輸出完全之后都換行一下。對於一些題目,可能就是不換行就導致了后面輸入數據錯位,那就肯定不可能過了。
關於時間復雜度分析:
通常來說一般的系統1s能跑的算法量級是不足1e8的,所以做題的時候評估算法效率很重要,直接判斷你的做法能否通過,當然這是以C/C++為標准的,其他語言自己乘個時間倍數。。
舉個例子,比如題目n = 1e5,那么我就可以很敏感的知道我的算法需要一個 O(n) 或者 O(nlogn)。平方復雜度直接拜拜!
最后關於 "我本地能通過,交上去就是不對"
這個問題很蠢!通不過就是有一些問題。一個是要累積經驗,分析到底可能出現的問題在哪里。另外不要使用一些奇怪的函數和行為。之前有見過有人使用了windows和linux平台那個功能的函數名都不一樣的奇葩函數。 如果你使用C/C++,最好別使用VS來寫算法code,這個默認是MS的,一般OJ上面編譯器都不會是這個鬼。