简体   繁体   中英

Time Limit Exceeded in C++ Online Judge

I just sent the solution to a problem COJ written in C ++. The problem is this link: http://coj.uci.cu/24h/problem.xhtml?pid=1839
This is my solution:

  #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;
  }

To this the judge online of COJ says: "Time Limit Exceeded". Can someone explain why?

Your could try to get rid of std::endl because it is slow. Instead, you use '\\n'. The code is below:

#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;
  }

Or you could try printf() to fasten your I/O.

This algorithm grows linearly , it should not be a limit factor. I believe I/O is the limiting factor. If you could find a algorithm that is log N , please tell me.

Someone vote it down because they believe doing I/O with standard out(stdout) is fast. However, std::endl flush after every iteration , which makes it slow.

Another idea is to use recursion, and you hope the judge system has good optimization on tail recursion(it is possible.). It may get a little faster, too.

On your own computer, you could even try to profile it to find the limiting factor, and if it is I/O, try the way above.

If it is still not fast enough, get rid of object-oriented design, use C and write direct to stdout instead use printf.

Good luck!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM