前提
使用言語 python
質問内容
pythonで競技プログラミングの勉強をしています.
AOJの二分探索の問題https://onlinejudge.u-aizu.ac.jp/courses/lesson/1/ALDS1/4/ALDS1_4_Bを以下のソースコードを使用して解いたのですが
python
1def i_input(): return int(input()) 2def i_map(): return map(int, input().split()) 3 4 5# listにitemがあったらTrue, なければFalseを返す 6def binary_search(list, item): 7 low = 0 8 high = len(list) - 1 9 while low <= high: 10 mid = (low + high) // 2 11 guess = list[mid] 12 if guess == item: 13 return True 14 elif guess > item: 15 high = mid - 1 16 else: 17 low = mid + 1 18 return False 19 20 21n = i_input() 22s = list(i_map()) 23q = i_input() 24t = list(i_map()) 25 26count = 0 27for i in t: # tの要素がsに含まれているか確認 28 if binary_search(s, i): 29 count += 1 30print(count)
めぐる式二分探索を使って解けずに困っています.(どのように判定式を記述すれば良いか分からない)
python
1def is_ok(mid): 2 """ 3 二分探索中の判定 4 :param mid: 5 """ 6 # ここの条件式をどう書けばよいかわかりません 7 pass 8 9 10def meguru_bisect(ng, ok): 11 12 while (abs(ok - ng) > 1): 13 mid = (ok + ng) // 2 14 if is_ok(mid): 15 ok = mid 16 else: 17 ng = mid 18 return ok 19
全体のソースコード(修正・追加箇所)
python
1# スニペット(再利用可能なソースコード) 2def i_input(): return int(input()) 3 4 5def i_map(): return map(int, input().split()) 6 7 8def is_ok(key): 9 # ここの部分の判定方法がわかりません. 10 11 if s[key] == i: 12 return True 13 else: 14 return False 15 16 17 18def binary_search(ng, ok): 19 while abs(ok - ng) > 1: 20 mid = (ok + ng) // 2 21 if is_ok(mid): 22 ok = mid 23 else: 24 ng = mid 25 return ng 26 27n = i_input() 28s = list(i_map()) 29q = i_input() 30t = i_map() 31 32count = 0 33for i in t: 34 # ngがリストの右端までいくとtの要素(i)を含んでいないと判定 35 if binary_search(-1, n) != n: 36 count += 1 37 38print(count)
実現したいこと
- めぐる式二分探索を使用してhttps://onlinejudge.u-aizu.ac.jp/courses/lesson/1/ALDS1/4/ALDS1_4_Bを解く.
最後に
初めての質問 & Markdown記法なので至らない点があると思いますがよろしくお願いします.
回答2件
あなたの回答
tips
プレビュー
退会済みユーザー
2022/08/11 05:06
2022/08/11 17:47