
Also, die Aufgabe lautet:
Durch die Analyse von Wochenenden und Feiertagen rund um Neujahr und den 1. Mai in Russland ist der Präsident von Flatlandia zu dem Schluss gekommen, dass das übrige Volk drastisch optimiert werden kann. Das Hauptziel besteht darin, sicherzustellen, dass die Bürger nicht mehr als 6 aufeinanderfolgende Arbeitstage im Kalenderjahr haben müssen. Der Präsident hat das Arbeitsministerium angewiesen, einen Zeitplan zur Verlegung von Wochenenden (Samstagen und Sonntagen) zu erstellen, damit die Bürger möglichst viele aufeinanderfolgende freie Tage haben können.
Es ist wichtig zu beachten, dass ein flachländischer Feiertag, der auf ein Wochenende (Samstag oder Sonntag) fällt, automatisch auf den ersten Arbeitstag nach dem Feiertag verschoben wird. Gemäß dem Dekret des Präsidenten kann jedoch jedes Wochenende, unabhängig davon, ob es mit einem Feiertag zusammenfällt oder nicht, auf jeden Arbeitstag verschoben werden. Feiertage werden jedoch niemals verschoben.
Schreiben Sie ein Programm, das dem Arbeitsministerium helfen wird, den erforderlichen Zeitplan zur Verlegung von Wochenenden im kommenden Jahr zu erstellen. Feiertage und Wochenenden aus dem vorherigen und folgenden Jahr sollten nicht berücksichtigt werden. Das Ziel besteht darin, die Anzahl der aufeinanderfolgenden freien Tage in einem Jahr zu maximieren.
Eingabeformat:
Die erste Zeile der Eingabe enthält zwei Zahlen - die Jahreszahl (Y) (2012≤Y≤2050) und der Wochentag für den 1. Januar dieses Jahres (W) (1≤W≤7, von Montag bis Sonntag). In diesem Jahresbereich sind Schaltjahre durch 4 teilbar.
Die zweite Zeile enthält die Anzahl der jährlichen Feiertage (N) in Flatlandia. Jede der folgenden N Zeilen enthält das Datum des nächsten Feiertags im Format DD.MM. Die Feiertagsdaten werden in chronologischer Reihenfolge aufgelistet, und alle Daten sind für das angegebene Jahr gültig und korrekt.
Ausgabeformat:
Geben Sie eine einzelne Zahl aus - die maximal mögliche Anzahl aufeinanderfolgender freier Tage für die Bewohner von Flatlandia im angegebenen Jahr, wenn die Wochenenden so verschoben werden, dass die Anzahl der aufeinanderfolgenden Arbeitstage in diesem Jahr 6 nicht überschreitet.
Beispiel:
Eingabe:
2012 7
1
01.01
Ausgabe:
63
Mein Versuch:
Code: Alles auswählen
import datetime
def is_leap_year(year):
if year % 4 == 0:
if year % 100 == 0:
if year % 400 == 0:
return True
else:
return False
else:
return True
else:
return False
def get_weekday(year, month, day):
date = datetime.date(year, month, day)
return date.weekday()
def get_weekdays_in_year(year):
weekdays = [0, 0, 0, 0, 0, 0, 0] # Sunday to Saturday
for month in range(1, 13):
days_in_month = 31
if month == 4 or month == 6 or month == 9 or month == 11:
days_in_month = 30
elif month == 2:
if is_leap_year(year):
days_in_month = 29
else:
days_in_month = 28
for day in range(1, days_in_month + 1):
weekday = get_weekday(year, month, day)
weekdays[weekday] += 1
return weekdays
def get_maximum_consecutive_holidays(year, start_weekday, holidays):
weekdays = get_weekdays_in_year(year)
consecutive_holidays = 0
current_consecutive_holidays = 0
for holiday in holidays:
day, month = map(int, holiday.split('.'))
weekday = get_weekday(year, month, day)
if weekdays[weekday] == 0: # Weekday is not already a holiday
current_consecutive_holidays += 1
else:
current_consecutive_holidays = 0
weekdays[weekday] += 1
if current_consecutive_holidays > consecutive_holidays:
consecutive_holidays = current_consecutive_holidays
return consecutive_holidays
year, start_weekday = map(int, input().split())
num_holidays = int(input())
holidays = []
for _ in range(num_holidays):
holiday = input()
holidays.append(holiday)
maximum_consecutive_holidays = get_maximum_consecutive_holidays(year, start_weekday, holidays)
print(maximum_consecutive_holidays)