Hello everybody , today I'll be testing speed of input/output on Codeforces. My objective is to provide assistance on determining input method for problems (You wouldn't want to get TLE because of I/O right?) and calculate the actual time your algorithm need to work in.
(I am currently Updating this post, if you wanted your language and method to be listed here , please contact me and your name will be largely on this post Xp)!!
Since the post has become very long now , I suggest searching for specific language or you might get dizzy and I cannot deliver you medicine on time :(
Languages tested: C/C++ , JAVA
How do I test?
I made two problems in polygon , then I create mashup contest from them. So I am able to test my solutions separately .
Links to my polygon problem is as follow , you can create your own mashup and test it yourself.
If you do not wish to do that you can see screenshots of my problems that contain every information you need.
test constraints are in the images above , please see before proceeding.
I do not consider 0ms and 15ms to be so much difference on codeforces , so both of them wil be considered 0ms.
INPUT
Every of the solution will follow this idea: we iterate through every input and add up into 64-bit integer then after that we mod it by 1,000,000,007
C/C++
1.Standard scanf
(GNU GCC 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 78ms #6 155ms #7 764ms #8 1512ms
(GNU GCC C11 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 31ms #5 78ms #6 156ms #7 764ms #8 1528ms
(GNU G++ 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 93ms #6 156ms #7 764ms #8 1497ms
(GNU G++11 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 78ms #6 156ms #7 764ms #8 1513ms
(GNU G++14 6.2.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 78ms #6 171ms #7 779ms #8 1544ms
(MVC++ 2010) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 93ms #6 171ms #7 717ms #8 1419ms
Seems like scanf works the same regardless of compliers.
2.Standard cin
(GNU G++ 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 171ms #5 810ms #6 1622ms #7 8876ms #8 >15000ms(TLE)
(GNU G++11 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 171ms #5 826ms #6 1637ms #7 8112ms #8 >15000ms(TLE)
(GNU G++14 6.2.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 140ms #5 655ms #6 1294ms #7 6239ms #8 12619ms
(MVC++ 2010) Time used on tests : #1 0ms #2 0ms #3 0ms #4 78ms #5 343ms #6 655ms #7 3369ms #8 6723ms
LOOK AT THIS!! FOR INTEGERS USING MVC++ 2010 COMPLIER IS FASTER THAN OTHERS
3.cin with ios_base::sync_with_stdio(false); and cin.tie(NULL);
(GNU G++ 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 61ms #5 249ms #6 499ms #7 2432ms #8 4773ms
(GNU G++ 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 46ms #5 249ms #6 483ms #7 2432ms #8 4835ms
(GNU G++14 6.2.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 30ms #5 109ms #6 218ms #7 1091ms #8 2167ms
(MVC++ 2010) Time used on tests : #1 0ms #2 0ms #3 0ms #4 62ms #5 327ms #6 639ms #7 3135ms #8 6255ms
LOOK AT THIS!! FOR INTEGERS USING G++14 COMPLIER IS FASTER THAN OTHERS and MVC++ 2010 had no differences compare to standard cin
4.Using getchar() , modified code from geek4geeks.org
This will work for both positive and negative 32-bit integers , so you might want to try it out.
(GNU GCC 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 30ms #6 46ms #7 140ms #8 295ms
(GNU GCC C11 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 0ms #6 30ms #7 139ms #8 264ms
(GNU G++ 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 0ms #6 31ms #7 140ms #8 280ms
(GNU G++11 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 0ms #6 30ms #7 139ms #8 280ms
(GNU G++14 6.2.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 31ms #5 140ms #6 296ms #7 1403ms #8 2761ms
(MVC++ 2010) Time used on tests : #1 0ms #2 0ms #3 0ms #4 30ms #5 109ms #6 218ms #7 1122ms #8 2261ms
Something is definitely wrong with G++14,MVC++ 2010 complier with getchar() , so you want to avoid these compilers if you use this fastscan method :) (Try it for yourself , this is amazing!!)
5.Fast and Furious custom by Al.Cash
Please refer to this blog: http://codeforces.net/blog/entry/45835
And my main() here:
Requires C++11 and does not work on MVC++
(GNU G++11 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 0ms #6 0ms #7 139ms #8 280ms
(GNU G++14 6.2.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 0ms #6 31ms #7 139ms #8 280ms
JAVA (Tested by bhishma)
1.BufferedReader and String.spit
(JAVA 8) Time used on tests : #1 77ms #2 77ms #3 93ms #4 140ms #5 296ms #6 452ms #7 1653ms #8 3119ms
2.BufferedReader and StringTokenizer
(JAVA 8) Time used on tests : #1 93ms #2 109ms #3 78ms #4 108ms #5 155ms #6 264ms #7 873ms #8 1606ms
3.Custom InputReader
(JAVA 8) Time used on tests : #1 93ms #2 93ms #3 78ms #4 108ms #5 93ms #6 139ms #7 280ms #8 452ms
OUTPUT
C/C++
1.Standard printf
(GNU GCC 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 31ms #5 202ms #6 1138ms #7 2292ms
(GNU GCC C11 5.1.0) Time used on tests : #1 0ms #2 0ms #3 46ms #4 421ms #5 4367ms #6 >15000ms(TLE) #7 >=15000ms(TLE)
(GNU G++ 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 31ms #5 217ms #6 1169ms #7 2324ms
(GNU G++11 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 31ms #5 218ms #6 1169ms #7 2308ms
(GNU G++14 6.2.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 202ms #6 1154ms #7 2262ms
(MVC++ 2010) Time used on tests : #1 0ms #2 0ms #3 0ms #4 31ms #5 233ms #6 1232ms #7 2386ms
AVOID GCC C11 if possible!!
2.Standard cout
(GNU G++ 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 62ms #5 514ms #6 2464ms #7 4944ms
(GNU G++11 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 46ms #5 514ms #6 2433ms #7 4913ms
(GNU G++14 6.2.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 30ms #5 187ms #6 888ms #7 1684ms
(MVC++ 2010) Time used on tests : #1 0ms #2 0ms #3 0ms #4 77ms #5 577ms #6 2916ms #7 5834ms
LOOK AT THIS!! FOR INTEGERS USING G++14 COMPLIER IS FASTER THAN OTHERS , EVEN PRINTF ITSELF?
3.cout with ios_base::sync_with_stdio(false);
(GNU G++ 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 46ms #5 452ms #6 2293ms #7 4742ms
(GNU G++11 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 46ms #5 468ms #6 2292ms #7 4616ms
(GNU G++14 6.2.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 30ms #5 139ms #6 717ms #7 1403ms
(MVC++ 2010) Time used on tests : #1 0ms #2 0ms #3 0ms #4 62ms #5 697ms #6 2932ms #7 5943ms
LOOK AT THIS!! FOR INTEGERS USING G++14 COMPLIER IS FASTER THAN OTHERS , EVEN PRINTF ITSELF? Also MVC++ 2010 does not seems to profit compare to standard cout
4.Using putchar()
My code only work for positive integers!!
(GNU GCC 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 62ms #6 327ms #7 686ms
(GNU GCC C11 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 31ms #5 61ms #6 342ms #7 655ms
(GNU G++ 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 62ms #6 373ms #7 686ms
(GNU G++11 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 46ms #6 327ms #7 670ms
(GNU G++14 6.2.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 46ms #5 373ms #6 2058ms #7 4102ms
(MVC++ 2010) Time used on tests : #1 0ms #2 0ms #3 0ms #4 30ms #5 296ms #6 1715ms #7 3213ms
So G++14 and MVC++ 2010 also have problem with putchar too :(. Anyway , I encouraged you to modify my code to be able to use with negative integer as well :)
5.Fast and Furious custom by Al.Cash
Please refer to this blog: http://codeforces.net/blog/entry/45835
And my main() here:
Requires C++11 and does not work on MVC++
(GNU G++11 5.1.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 62ms #6 296ms #7 577ms
(GNU G++14 6.2.0) Time used on tests : #1 0ms #2 0ms #3 0ms #4 0ms #5 61ms #6 296ms #7 592ms
JAVA (Tested by bhishma)
1.System.out.print()
(JAVA 8) Time used on tests : #1 109ms #2 139ms #3 186ms #4 592ms #5 4945ms #6 >15000ms(TLE) #7 >15000ms(TLE)
2.PrintWriter
(JAVA 8) Time used on tests : #1 93ms #2 124ms #3 139ms #4 140ms #5 296ms #6 904ms #7 1590ms
3.System.out.print() with StringBuilder
(JAVA 8) Time used on tests : #1 108ms #2 93ms #3 109ms #4 124ms #5 249ms #6 810ms #7 1497ms
4.System.out.print() with StringBuilder but clears the StringBuilder buffer after certain writes
(JAVA 8) Time used on tests : #1 124ms #2 124ms #3 124ms #4 124ms #5 264ms #6 763ms #7 1418ms
5.PrintWriter+StringBuilder
(JAVA 8) Time used on tests : #1 93ms #2 78ms #3 108ms #4 108ms #5 233ms #6 779ms #7 1482ms
UPD1: Added putchar()/getchar() method for C/C++
UPD2: Added tests for MVC++ 2010 compiler
UPD3: Added JAVA tests , thanks to bhishma
UPD4: Added fast and furious C/C++ tests , thanks to Al.Cash
Auto comment: topic has been updated by PoomrokC (previous revision, new revision, compare).
You can test my implementation in case you'll be interested http://codeforces.net/blog/entry/45835
The speed is really impressive , I'm adding report to my blog. That's really FAST AND FURIOUS!! Thanks for your awesome code :)