[白俊1783-病気の夜]


質問する
病気のナイトクラブ× Mサイズの碁盤の一番左下にあります.健康的な普通のチェスと違って、病気のナイトは4種類しか移動できない.
上向き
  • グリッド、右側1グリッド
  • 上1マス、2マス右
  • 下1格、2格右
  • 下2格、1格右
  • 病気のナイトは旅行を始めるつもりで、旅行中に訪れる部屋の数を最大化します.病気の夜の移動回数が4回以上であれば、移動方法は1回使用します.移動回数が4回未満(アクセスしたセルが5個未満)の場合は、移動方法に制限はありません.
    碁盤が大きくなると,出生病のナイトが旅行中にアクセスできる最大格数を求める.
    入力
    1行目はチェス盤の縦長Nと横長Mを与える.NおよびMは、20,000,000,000,000,000以下の自然数である.
    しゅつりょく
    病気のナイトクラブは旅行で訪問できる部屋の数の中で最も高いです.
    例1

    例2

    例3

    例4

    例5

    分析内容
    N=1の場合、1つのセルも移動できないため、1つのセルが移動できません.そのため、キャバクラが存在する格子も含めてアクセスできる格子が1つあります.
    N=2の場合、1マス上下に移動できるので、2番と3番の方法で移動できます.現在存在する格数(M-1)/2+1の格を含めて、2格を右に移動したい場合(M-1)/2/2格で移動することができます.
    N=>3かつN<7の場合、右に1マス移動すると最大移動回数を求めることができる.この場合、アクセスできるセル数はMと同じです.
    M>7の場合は4つの方法が用いられるが,最大移動格子数を求めるためには1回と4回繰り返すことが望ましい.2番と3番を1回ずつ使用する場合、M-5+2+1格にアクセスできます.
    コード実装(Python言語)
    N, M = map(int, input().split()) #두 개의 정수 입력 받기
    
    if N == 1: #N이 1일 때
    	 count = 1 
    elif N == 2: #N이 2일 때
    	count = min(4, (M-1)//2 + 1) 
    elif M < 7: #N>=3 그리고 N<7 일 때
    	count = min(4, M) 
    else: #N >= 7일 때
    	count = M-5 + 2 + 1 
        
    print(count)
    好奇心のある場所
    1)移動可能回数が最大4回という理由がわからない.