[SWEA] 4839. [Python S/Wトラブルシューティング基本]2日目-サブセットの和[D 3]
4821 ワード
📚 質問する
https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do
ローカルセットを求めるには、そして,
部分集合の出現をバイナリ符号化し,機械を理解しやすく計算すれば容易に変化する.
2 n 2^n 2 nは1つ1つ符号化され、
📒 コード#コード#
これは文で部分集合を表すよりもずっと速く、簡単なので、ビット演算子を使って問題を解決することを知っておく必要があります.
https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do
ローカルセットを求めるには、
<<
ビット演算子を使用します.(1< i & (1 << j)
バイナリの各ビット数に1があることを確認し,部分集合の値を入れる.部分集合の出現をバイナリ符号化し,機械を理解しやすく計算すれば容易に変化する.
2 n 2^n 2 nは1つ1つ符号化され、
i & (1 << j)
は1つ1つそれを部分集合の因数と結びつけて抽象的に復号化する.📒 コード#コード#
T = int(input())
A = list(range(1, 13)) # A: [1,2,...,12]
for tc in range(1, T+1):
N, K = map(int, input().split()) # N:부분집합 원소의 수, K:부분 집합의 합
result_sum = 0 # 만족시키는 부분집합 개수
for i in range(1 << 12): # 모든 부분집합 탐색
cnt = 0
sum_num = 0
for j in range(12):
if i & (1 << j):
sum_num += A[j]
cnt += 1
if cnt == N and sum_num == K:
result_sum += 1 # 만족시키는 경우 + 1
print(f'#{tc} {result_sum}')
🔍 結果:Passこれは文で部分集合を表すよりもずっと速く、簡単なので、ビット演算子を使って問題を解決することを知っておく必要があります.
Reference
この問題について([SWEA] 4839. [Python S/Wトラブルシューティング基本]2日目-サブセットの和[D 3]), 我々は、より多くの情報をここで見つけました https://velog.io/@yunhlim/SWEA-4839.-파이썬-SW-문제해결-기본-2일차-부분집합의-합-D3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol