ABC187 C - 1-SAT에서 배운



음, 어떻게든 꽤 보일지도.



바삭 바삭했지만 훌륭하게 TLE

SAT_rev1.py
from sys import exit
n = int(input())
lis = []
_lis = []

for _ in range(n):
    s = input()
    if s[0] == "!":
        _lis.append(s)
    else:
        lis.append(s)

for x in lis:        # len(lis) = 10**5
    if "!"+x in _lis:# len(_lis) = 10**5 の場合、10**10 となり TLE
        print(x)
        exit()
print("satisfiable")


※리스트 x in s의 계산량 O(n) 참조

그럼, 시험에 사전으로 해보자.
아래로 다녔다.

SAT_rev2.py
from sys import exit
n = int(input())
lis = []
dic = {}

for _ in range(n):
    s = input()
    if s[0] == "!":
        if s not in dic:
            dic[s] = 0
        dic[s] += 1
    else:
        lis.append(s)

for x in lis:       #計算量 O(N)
    if "!"+x in dic:#計算量 O(1) 
        print(x)
        exit()
print("satisfiable")


거짓, 사전, set 는 in 연산자는 O(1) 로 끝난다.
공부가 되었다.

좋은 웹페이지 즐겨찾기