結果
| 問題 |
No.204 ゴールデン・ウィーク(2)
|
| コンテスト | |
| ユーザー |
kichirb3
|
| 提出日時 | 2018-03-27 17:25:11 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 2,126 bytes |
| コンパイル時間 | 94 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 11,008 KB |
| 最終ジャッジ日時 | 2024-06-25 12:48:48 |
| 合計ジャッジ時間 | 2,781 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 41 RE * 5 |
ソースコード
# -*- coding: utf-8 -*-
"""
No.204 ゴールデン・ウィーク(2)
https://yukicoder.me/problems/no/204
問題文にある
「有給休暇として、連続した最大D日間の平日を休日とする権利が与えられます。(分割してはいけません)」とは、
単純に有給休暇を細切れに取得してはならないという意味だけではなく
- 連続して取得したD日の有給休暇が平日の島2つにまたがってはならない
という意味も含んでいるっぽい。
xoxooooooooxxo というカレンダーに対して4日の有給休暇を取得する場合、xoxooooooooDDoD もしくは DDoDooooooooxxo のようにしてはならない。
"""
import sys
from sys import stdin
input = stdin.readline
def take_days_off(D, s, cal):
# カレンダーのs日目からD日連続の有給を取得した場合のカレンダー情報を返す
# 有給休暇が複数の平日島にまたがってしまう場合、有給休暇を取得できないのでNoneを返す
t = cal[s:s+D]
res = []
if t[0] == 'x':
res.append(0)
for i in range(1, len(t)):
if t[i-1] == 'o' and t[i] == 'x':
res.append(i)
if len(res) >= 2:
return None
gw = list(cal)
for i in range(s, s+D):
gw[i] = 'o'
return ''.join(gw)
def check_longest(cal):
# カレンダーをチェックして、一番長い連休日数を返す
res = cal.split('x')
ans = 0
for r in res:
ans = max(ans, len(r))
return ans
def solve(D, cal):
ans = D
for i in range(len(cal)-D+1):
gw = take_days_off(D, i, cal)
if not gw is None:
ans = max(ans, check_longest(gw))
return ans
def main(args):
D = int(input())
# 素のカレンダー情報を文字列として記憶、2週間の前後で有給休暇を取得しても良いので前後D日分の平日も追加しておく
cal = 'x' * D
cal += input().strip()
cal += input().strip()
cal += 'x' * D
ans = solve(D, cal)
print(ans)
if __name__ == '__main__':
main(sys.argv[1:])
kichirb3