回答
Submission #309211 - AtCoder Regular Contest 010 | AtCoder
祝日をリセットして,新しい祝日を決めたので,連休の数を求めてくださいという問題.
日月を日だけで表現し(例えば,2/1なら30日目といったように),先に土日を埋め,読み込んだ祝日をあとで埋めるといった感じでしょうか.
祝日は,すでに指定された日にちが土日祝であれば,それ以降の平日を祝日とするので,その処理を入れる.ただし,私は下手くそなので,12月の最後のほうで来年の1/1まで祝日にしようとしていてREを連発させていました.ヘボい.(要注意です)
最後はfor文で連続しているところがあるかどうかを調べて,連続しているところの最大値を出力し,終わりです.
N = int(input()) months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] m_start_day = [0] for i in range(0, 11): m_start_day.append(m_start_day[i] + months[i]) holi = [False for _ in range(0, 366)] for i in range(0, 366): if i % 7 == 0 or i % 7 == 6: holi[i] = True for _ in range(N): m, d = map(lambda x: int(x) - 1, input().split("/")) nowday = m_start_day[m] + d if holi[nowday]: i = 1 while (nowday + i) <= 365 and holi[nowday + i]: i += 1 if nowday + i >= 366: break else: if nowday + i <= 365: holi[nowday + i] = True else: holi[nowday] = True count = 0 res = 0 for i in range(0, 366): if holi[i]: count += 1 else: res = max(res, count) count = 0 else: res = max(res, count) print(res)
日数のみの表現に困ったこともあり,ちょっとプログラムが長く,冗長になってしまったかも.