AtCoder 콘테스트용 정리【Python】

AtCoder



이 기사의 목적


  • Atcoder에서의 콘테스트 프로덕션 중에 따뜻한 당황하지 않도록 정리하십시오
  • 문제를 해결하는 도중에 참조하기 쉬운 상태로 만드는 것
  • 출력 작업에 익숙해지기
  • Markdown 기법에 익숙해지기
  • 목차로 페이지내 링크가 하고 싶었다 → (2019/10/03 시점) 제목에 번호를 매기지 않고 해결했지만 역시 번호를 지정하고 싶습니다 (공부 중)

  • 【수시 갱신 예정】


    목차


    1. 입력편

    appendix[해답 용지]

    2. 리스트편

    3. 수치편

    4. 쓰기 편

    5. 출력편



    입력편



    1.0 입력용


    import sys
    input = sys.stdin.readline
    

    이제 input()

    1.1 단일 입력


    n=int(input())
    


    이 때 입력

    1.2 다중 입력


    n,m=(int(x) for x in input().split())
    


    N K와 같은 경우 입력

    1.3 목록 입력


    l = [int(i) for i in input().split()]
    


    h1 h2 ... hN 같은 때 사용

    j1
    j2
    .
    .
    .
    jN
    같이 세로에 늘어서 있으면
    j=[]
    for _ in range(n):
        j.append(input())
    

    appendix



    답변 용지

    contest_base.py
    import sys
    import itertools
    input = sys.stdin.readline
    
    n=int(input())
    n,m=(int(x) for x in input().split())
    l = [int(i) for i in input().split()]
    
    print()
    

    기본적으로 이것을 복사하여 사용합니다.
    필요한 입력만 남겨두고 나중에 지우기

    리스트편



    2.1 빈 리스트, 요소가 0만의 리스트


    l=[]
    l=[0]*n
    

    2.2 목록에 요소 추가


    l.append(n)
    

    2.3 중복 없음 목록


    l=set(l)
    

    2.4 목록을 큰 순서 (내림차순)로 정렬


    l.sort(reverse=True)
    

    2.5 우선 순위 큐



    예로서, 【「리스트 a의 최대치를 1/2로 리스트 a에 되돌린다」를 m회 반복한다】
    import heapq
    a = list(map(lambda x: int(x)*(-1), input().split()))
    heapq.heapify(a)
    for _ in range(m):
        temp = heapq.heappop(a)
        heapq.heappush(a, (-1)*(-temp//2))
    

    우선 순위가 지정된 대기열을 사용하지 않는 경우 :
    a = [int(i) for i in input().split()]
    a.sort(reverse=True)
    for _ in range(m):
        a[0]=a[0]//2
        a.sort(reverse=True)
    

    이 경우 일일이 모든 요소를 ​​재정렬하기 때문에 계산량이 방대해져 TLE가 된다

    수치편



    3.1 소인수 분해 목록 열거


    def factorize(n):
        b = 2
        fct = []
        while b * b <= n:
            while n % b == 0:
                n //= b
                fct.append(b)
            b = b + 1
        if n > 1:
            fct.append(n)
        return fct
    

    3.2 우기 판단 : 짝수 True 홀수 False


    n%2==0
    

    3.3 최대 공약수, 최소 공배수



    n과 m의 최대 공약수 ans를 구한다.
    import math
    ans=math.gcd(n,m)
    

    최소 공배수는 gcd를 사용하여
    def lcm(n,m):
        return (n*m)//math.gcd(n,m)
    

    3.4 약수 열거, 공약 수 열거


    def make_divisors(n):
        divisors = []
        for i in range(1, int(n**0.5)+1):
            if n % i == 0:
                divisors.append(i)
                if i != n // i:
                    divisors.append(n//i)
        divisors.sort()
        return divisors
    

    공약수열거는 make_divisors
    ansdiv=set(make_divisors(n))&set(make_divisors(m))
    

    쓰기 편



    4.1 이중 루프를 한 줄로


    import itertools
    for i,j in itertools.product(range(n), range(n)):
        pass
    

    계산량은 변하지 않기 때문에 경쟁 프로적으로 필요하지 않습니까?

    4.2 목록 내 조합


    import itertools
    itertools.combinations(list,n)
    

    계산량이 많기 때문에 주의

    출력편



    5.1 공간 구분 출력


    print(s,end=' ')
    


    이런 출력이 요구될 때 사용
    대체로 루프에 넣어

    ToDo


  • 더 많은 변형 증가
  • itertools 편이나 늘려 가고 싶다

  • github



    htps : // 기주 b. 코 m / 코바유 0902 아 rt / 아 t 코로 r

    좋은 웹페이지 즐겨찾기