第1週第2回Fly me to the Alpha Centauri


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!