2015-12-23 43 views
-4

我剛剛將解決方案發送給用C++編寫的COJ問題。問題是這樣的鏈接:http://coj.uci.cu/24h/problem.xhtml?pid=1839
這是我的解決方案:C++ Online Judge中超出的時間限制

#include<iostream> 

    using namespace std; 

    unsigned int t, n; 

    int main(){ 

    cin >> t; 

    while(t > 0 && cin >> n){ 
     cout<< (n * 8) + 42 << endl; 
     t--; 
    } 
    return 0; 
    } 

對此COJ的法官網上說:「時間超出限制」。有人能解釋爲什麼嗎?

+0

你的代碼試圖做什麼?問題必須自成體系! – Deduplicator

+0

「超時限」爲什麼?由於您的程序超出了運行解決方案的時間限制? – sehe

+0

我投票結束這個題目,因爲它是關於一個持續的在線挑戰 – sehe

回答

-1

你可以嘗試擺脫std::endl,因爲它很慢。相反,您使用'\ n'。代碼如下:

#include<iostream> 

    using namespace std; 

    unsigned int t, n; 

    int main(){ 



    cin >> t; 

    while(t > 0 && cin >> n){ 
     cout<< (n * 8) + 42 << '\n'; 
     t--; 
    } 

    cout.flush(); 
    return 0; 
    } 

或者你可以嘗試printf()繫好I/O。

該算法線性增長,它不應該是一個限制因子。我相信I/O是限制因素。如果您可以找到一個算法,那麼請告訴我log N

有人將它投下來是因爲他們認爲使用標準輸出(stdout)進行I/O的速度很快。但是,在每次迭代之後刷新std :: endl ,這會使其變慢。

另一個想法是使用遞歸,你希望判斷系統在尾遞歸方面有很好的優化(這是可能的)。它可能會變得更快一點。

在您自己的計算機上,您甚至可以嘗試對其進行配置以查找限制因素,如果是I/O,請嘗試上述方法。

如果它仍然不夠快,擺脫面向對象的設計,使用C並直接寫入標準輸出而不是使用printf。

祝你好運!

+0

非常感謝。我會嘗試你所說的 – Jonatan

相關問題