第1週第2回Fly me to the Alpha Centauri
7428 ワード
1.問題リンク
https://www.acmicpc.net/problem/1011
2.試合前の計画と考え方
2-1. ソリューション
前のステップの移動距離は、次のステップの移動距離を決定します.
最初の移動距離と最後の移動距離は1でなければなりません.
特に最後の移動距離の制限条件は、真ん中の移動距離を調整する必要があります!
中間移動距離調整は簡単な条件文と繰り返し文では実現できません!
そこで,各移動距離と操作回数の間の規則的な数列問題を解く.
2-2. 規則の検索
▶stepsは規則性がなく、長さと操作回数がポイント!
▶この数列と規則性を利用して、記憶で解く!
2-3. に答える
# T = test case
# x y = 각 지점
# 최초 작동시엔 이론상 -1 , 0 , 1 가능하며 실제론 반드시 1
# 최종 지점 도착 직전 마지막 이동거리는 반드시 1
# 작동장치횟수의 최소값
import sys
T = int(sys.stdin.readline())
array_test_case = []
for i in range(T):
array_test_case.append(list(map(int, sys.stdin.readline().split())))
def get_minimum_value(T, array_test_case):
for i in range(T):
length = array_test_case[i][1] - array_test_case[i][0]
main_process_in_function(length)
def main_process_in_function(length):
max_length_for_each_operation = []
for j in range(1, length + 1):
if j == 1:
max_length_for_each_operation.append(1)
else:
max_length_for_each_operation.append(max(max_length_for_each_operation) + j // 2)
if max(max_length_for_each_operation) < length:
continue
elif max(max_length_for_each_operation) == length:
print(j)
break
else:
print(j - 1) # 해당 인덱스에 기재된 길이부터 횟수가 증가, 그 이전의 인덱스까지가 유효한 길이
break
get_minimum_value(T, array_test_case)
4.説明しながら悩むところ
重要なのは、できるだけ早く規則性があるかどうかを把握することです.
すべての状況でナビゲートできない数.
ナビゲーションロジックが実装されない場合は、ルールが必要です!!
アルゴリズムの実装に時間がかかりすぎる
別の方向に考えることも大切だが、時間を節約することも大切だ.
10分ほど考えて、実現アルゴリズムの練習に励みましょう.
5.問題を解いて理解する概念と感じ
break
すべての繰り返し文の方法ではありません.現在実行中の重複文から抜け出す方法だったのを覚えています.
6. remind
코드에 대한 이해가 우선이다. sugar syntax보다는 sugar logic!
Reference
この問題について(第1週第2回Fly me to the Alpha Centauri), 我々は、より多くの情報をここで見つけました https://velog.io/@gyrbs22/1주차-2번Fly-me-to-the-Alpha-Centauriテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol