結果
問題 |
No.1538 引きこもりさんは引き算が得意。
|
ユーザー |
![]() |
提出日時 | 2021-05-25 12:52:09 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 571 ms / 2,000 ms |
コード長 | 1,032 bytes |
コンパイル時間 | 333 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 19,748 KB |
最終ジャッジ日時 | 2024-12-14 05:22:55 |
合計ジャッジ時間 | 11,728 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 54 |
ソースコード
n,k=map(int,input().split()) a=list(map(int,input().split())) if k in a: print('Yes') exit() b=[a[i] for i in range(n//2)] nb=len(b) c=[a[i] for i in range(n//2,n)] nc=len(c) s1=set() s2=set() s3=set() import itertools all=itertools.product([-1,0,1], repeat=nb) for x in all: cnt=0 for i in range(nb): cnt+=b[i]*x[i] if max(x)==1 and min(x)==-1: if cnt==k: print('Yes') exit() s1.add(cnt) elif max(x)==1: s2.add(cnt) elif min(x)==-1: s3.add(cnt) t1=set() t2=set() t3=set() all=itertools.product([-1,0,1], repeat=nc) for x in all: cnt=0 for i in range(nc): cnt+=c[i]*x[i] if max(x)==1 and min(x)==-1: if cnt==k: print('Yes') exit() t1.add(cnt) elif max(x)==1: t2.add(cnt) elif min(x)==-1: t3.add(cnt) for i in s1: if i+k in t1 or i+k in t2 or i+k in t3: print('Yes') exit() for i in s2: if i+k in t1 or i+k in t2: print('Yes') exit() for i in s3: if i+k in t1 or i+k in t3: print('Yes') exit() print('No')