Блог пользователя thekushalghosh

Автор thekushalghosh, история, 6 лет назад, По-английски

Hello Codeforces Community,

Actually all of the Python users over here would agree that "sometimes" we need to write a bit long for taking input in Python, and it is also slow.

That's why I made a good template for taking Quick And Fast Input, which I would like to share.

import sys
input = sys.stdin.readline

############ ---- Input Functions ---- ############
def inp():
    return(int(input()))
def inlt():
    return(list(map(int,input().split())))
def insr():
    s = input()
    return(list(s[:len(s) - 1]))
def invr():
    return(map(int,input().split()))

Just paste this template at the beginning of your Code.

It comprises of 4 functions :-

1) inp — For taking integer inputs.

2) inlt — For taking List inputs.

3) insr — For taking string inputs. Actually it returns a List of Characters, instead of a string, which is easier to use in Python, because in Python, Strings are Immutable.

4) invr — For taking space seperated integer variable inputs.

The input = sys.stdin.readline is actually for Faster Inputs, because line reading through System STDIN (Standard Input) is faster in Python.

  • Проголосовать: нравится
  • +26
  • Проголосовать: не нравится

»
6 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

This blog may be useful.

»
6 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

Thank You! This is so useful!

»
5 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Hi, I just want to ask when to use sys.stdin.readline, because once I used it and it gave me wrong output (WA) and when I removed it, my code was Accepted. Here are my submissions:

With sys.stdin.readline: 108547882 Without: 108548171

»
4 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

can anyone share the full template for Python please

  • »
    »
    4 года назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    I won't say my template is the best out there for Python. But I think it might be of some use to you. Sharing it below, I have made separate ones for both Codechef and Codeforces. Here you go. Hope you find it helpful :)

    # ENTER YOUR DETAILS HERE -------------------->
    '''
            // -- Template by A_*_A -- //
                                                '''
    #       <----------------------------------------
    
    # ENTER YOUR CODE HERE  -------------------->
    # sys.setrecursionlimit(1000)
    
    ''' #   0.7 sec average INTEST    -   best for Codechef
    import atexit,io,os,sys
    ss=io.BytesIO()
    _write=ss.write
    ss.write=lambda s:_write(s.encode())
    atexit.register(lambda:os.write(1,ss.getvalue()))
    y_in=open(0).read().split("\n")
    def y_inf():
        for y_id in range(len(y_in)):
            yield y_id
    y_ino=y_inf()
    input=lambda:y_in[next(y_ino)]
    # '''
    
    ''' #   1.1 sec average INTEST
    import sys
    input=sys.stdin.readline
    # input=lambda:sys.stdin.readline().rstrip("\r\n")
    # '''
    
    # ''' # REGION FASTIO   1.7 sec average INTEST    -   best for Codeforces
    import os,sys
    from io import BytesIO,IOBase
    BUFSIZ=8192
    class FastIO(IOBase):
        newlines=0
        def __init__(self,file):
            self._fd=file.fileno()
            self.buffer=BytesIO()
            self.writable="n"in file.mode or "r" not in file.mode
            self.write=self.buffer.write if self.writable else None
        def read(self):
            while True:
                b=os.read(self._fd,max(os.fstat(self._fd).st_size,BUFSIZ))
                if not b:
                    break
                ptr=self.buffer.tell()
                self.buffer.seek(0,2),self.buffer.write(b),self.buffer.seek(ptr)
            self.newlines=0
            return self.buffer.read()
        def readline(self):
            while self.newlines==0:
                b=os.read(self._fd,max(os.fstat(self._fd).st_size, BUFSIZ))
                self.newlines=b.count(b"\n")+(not b)
                ptr=self.buffer.tell()
                self.buffer.seek(0, 2),self.buffer.write(b),self.buffer.seek(ptr)
            self.newlines-=1
            return self.buffer.readline()
        def flush(self):
            if self.writable:
                os.write(self._fd,self.buffer.getvalue())
                self.buffer.truncate(0),self.buffer.seek(0)
    class IOWrapper(IOBase):
        def __init__(self, file):
            self.buffer=FastIO(file)
            self.flush=self.buffer.flush
            self.writable=self.buffer.writable
            self.write=lambda s:self.buffer.write(s.encode("ascii"))
            self.read=lambda:self.buffer.read().decode("ascii")
            self.readline=lambda:self.buffer.readline().decode("ascii")
    if sys.version_info[0]<3:
        sys.stdin,sys.stdout=FastIO(sys.stdin),FastIO(sys.stdout)
    else:
        sys.stdin,sys.stdout=IOWrapper(sys.stdin),IOWrapper(sys.stdout)
    input=lambda:sys.stdin.readline().rstrip("\r\n")
    # END REGION '''
    
    #   2.1 sec average INTEST
    tcs = 1
    # tcs = int(input())
    for tc in range(tcs):
        print("Hello World!")
    
    #       <----------------------------------------
    
    # ENTER YOUR NOTES HERE -------------------->
    '''
            // -- Template by A_*_A -- //
                                                '''
    #       <----------------------------------------
    
    
    • »
      »
      »
      4 года назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      @a_vantik_a Thanks! though I need to understand it all, looks daunting. Do you've a blog or something of that sort explaining it in chunks? Would be of big BIG help !

      • »
        »
        »
        »
        4 года назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится

        Hey, you are welcome. I am glad you found it helpful :) I have added commments to the code below, to make it a bit easy to understand. In case you want more reference or meaning about the code, you can simply google it. I referred a lot of blogs to come up with this FASTIO :)

        # ''' # 0.65 sec - NOTE: ONLY SEND STRINGS TO STDOUT
        import atexit, io, os
        inputt = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline   # read STDIN in 1 go
        input = lambda: inputt()   # use for integer input
        # input = lambda: inputt().decode().strip()   # use for string input
        ss = io.BytesIO()
        _write = ss.write
        ss.write = lambda s: _write(s.encode())     # byte text optimization
        atexit.register(lambda: os.write(1, ss.getvalue()))     # os.write is fast!!!
        print=ss.write
        # END REGION '''
        

        Have a good day, cheers!

      • »
        »
        »
        »
        4 года назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится

        I know using Python in Codeforces on a long term basis isn't really a good idea. But I am doing it for my own research reasons. Here is the whole list of FASTIO Comparisons I did for Python3, to come up with the best case for both Codechef and Codeforces, results were taken using best of 3 runs for each template. Hope you find it helpful :)


        # ''' # FASTIO BEGINS 0.34 sec # FASTIO ENDS ''' import sys;k=int(sys.stdin.readline().split()[1]);sys.stdout.write('%d'%sum(1 for x in map(int,sys.stdin.buffer) if not x%k)) ---------------------------------------------------------------- # ''' # FASTIO BEGINS 0.37 sec import sys # FASTIO ENDS ''' _, k = map(int, sys.stdin.readline().split()) count = sum(1 for x in map(int, sys.stdin.buffer) if not x % k) sys.stdout.write(str(count)) ---------------------------------------------------------------- # ''' # FASTIO BEGINS 0.64 sec import sys input=sys.stdin.readline # FASTIO ENDS ''' y0, y1 = [int(x) for x in input().split()] c = sum(not int(input()) % y1 for i in range(y0)) print(c) ---------------------------------------------------------------- # ''' # FASTIO BEGINS 0.65 sec import atexit, io, os inputt = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline input = lambda: inputt() # int # input = lambda: inputt().decode().strip() # str ss = io.BytesIO() _write = ss.write ss.write = lambda s: _write(s.encode()) atexit.register(lambda: os.write(1, ss.getvalue())) # FASTIO ENDS ''' y0, y1 = [int(x) for x in input().split()] c = sum(not int(input()) % y1 for i in range(y0)) print(c) ---------------------------------------------------------------- # ''' # FASTIO BEGINS 0.87 sec import sys input=lambda:sys.stdin.readline() # FASTIO ENDS ''' y0, y1 = [int(x) for x in input().split()] c = sum(not int(input()) % y1 for i in range(y0)) print(c) ---------------------------------------------------------------- # ''' # FASTIO BEGINS 0.94 sec import atexit,io,os,sys ss=io.BytesIO() _write=ss.write ss.write=lambda sett:_write(sett.encode()) atexit.register(lambda:os.write(1,ss.getvalue())) y_in=open(0).read().split("\n") def y_inf(): for y_id in range(len(y_in)): yield y_id y_ino=y_inf() input=lambda:y_in[next(y_ino)] # FASTIO ENDS ''' y0, y1 = [int(x) for x in input().split()] c = sum(not int(input()) % y1 for i in range(y0)) print(c) ---------------------------------------------------------------- # ''' # FASTIO BEGINS 1.08 sec import sys input=lambda:sys.stdin.readline().rstrip("\r\n") # FASTIO ENDS ''' y0, y1 = [int(x) for x in input().split()] c = sum(not int(input()) % y1 for i in range(y0)) print(c) ---------------------------------------------------------------- # ''' # FASTIO BEGINS 1.8 sec import os,sys from io import BytesIO,IOBase BUFSIZ=8192 class FastIO(IOBase): newlines=0 def __init__(self,file): self._fd=file.fileno() self.buffer=BytesIO() self.writable="n"in file.mode or "r" not in file.mode self.write=self.buffer.write if self.writable else None def read(self): while True: b=os.read(self._fd,max(os.fstat(self._fd).st_size,BUFSIZ)) if not b: break ptr=self.buffer.tell() self.buffer.seek(0,2),self.buffer.write(b),self.buffer.seek(ptr) self.newlines=0 return self.buffer.read() def readline(self): while self.newlines==0: b=os.read(self._fd,max(os.fstat(self._fd).st_size, BUFSIZ)) self.newlines=b.count(b"\n")+(not b) ptr=self.buffer.tell() self.buffer.seek(0, 2),self.buffer.write(b),self.buffer.seek(ptr) self.newlines-=1 return self.buffer.readline() def flush(self): if self.writable: os.write(self._fd,self.buffer.getvalue()) self.buffer.truncate(0),self.buffer.seek(0) class IOWrapper(IOBase): def __init__(self, file): self.buffer=FastIO(file) self.flush=self.buffer.flush self.writable=self.buffer.writable self.write=lambda sett:self.buffer.write(sett.encode("ascii")) self.read=lambda:self.buffer.read().decode("ascii") self.readline=lambda:self.buffer.readline().decode("ascii") if sys.version_info[0]<3: sys.stdin,sys.stdout=FastIO(sys.stdin),FastIO(sys.stdout) else: sys.stdin,sys.stdout=IOWrapper(sys.stdin),IOWrapper(sys.stdout) input=lambda:sys.stdin.readline().rstrip("\r\n") # FASTIO ENDS ''' y0, y1 = [int(x) for x in input().split()] c = sum(not int(input()) % y1 for i in range(y0)) print(c) ---------------------------------------------------------------- # ''' # FASTIO BEGINS 2.1 sec # FASTIO ENDS ''' y0, y1 = [int(x) for x in input().split()] c = sum(not int(input()) % y1 for i in range(y0)) print(c)