結果
問題 |
No.1538 引きこもりさんは引き算が得意。
|
ユーザー |
![]() |
提出日時 | 2021-06-12 22:37:52 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 229 ms / 2,000 ms |
コード長 | 1,618 bytes |
コンパイル時間 | 1,215 ms |
コンパイル使用メモリ | 81,972 KB |
実行使用メモリ | 107,852 KB |
最終ジャッジ日時 | 2024-12-17 20:19:56 |
合計ジャッジ時間 | 6,970 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 54 |
ソースコード
from collections import defaultdict def main(): N,K = map(int,input().split()) A = list(map(int,input().split())) if K in A: print("Yes");exit() s = set([]) B = A[:N//2] C = A[N//2:] c = [-1,0,1] S = defaultdict(list) for i in range(3**len(B)): cmx = 0; cmn = 0 val = 0 for j in range(len(B)): sig = i%(3**(j+1)) sig //= 3**j #print(i,j,sig) if sig == 0: #-1 val -= B[j] cmn = min(cmn, -1) elif sig == 2: #+1 val += B[j] cmx = max(cmx, 1) #print("VAL",val,cmx,cmn) if cmx == 1 and cmn == -1 and val == K: print("Yes");exit() S[val].append((cmx,cmn)) #print(S) T = defaultdict(list) for i in range(3**len(C)): cmx = 0; cmn = 0 val = 0 for j in range(len(C)): sig = i%(3**(j+1)) sig //= 3**j #print(i,j,sig) if sig == 0: #-1 val -= C[j] cmn = min(cmn, -1) elif sig == 2: #+1 val += C[j] cmx = max(cmx, 1) #print("VAL",val,cmx,cmn) if cmx == 1 and cmn == -1 and val == K: print("Yes");exit() T[val].append((cmx,cmn)) #print(T) for x in S: nokori = K - x for xmx, xmn in S[x]: for ymx,ymn in T[nokori]: if max(xmx,ymx) == 1 and min(xmn,ymn) == -1: print("Yes");exit() print("No") if __name__ == '__main__': main()