ABC187 C - 1-SAT에서 배운
4964 단어 AtCoder파이썬AtCoderBeginnerContest
음, 어떻게든 꽤 보일지도.
바삭 바삭했지만 훌륭하게 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) 로 끝난다.
공부가 되었다.
Reference
이 문제에 관하여(ABC187 C - 1-SAT에서 배운), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/AKpirion/items/5c787dcd99a4cb6cbb4b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)