من رفتم سربازی اگر محتوای منو دوست داشتید و بدردتون خورد از من حمایت مالی کنید

پاسخ سوال قرارمون یادت نره! کوئرا

پاسخ سوال قرارمون یادت نره! کوئرا
پاسخ سوال قرارمون یادت نره! کوئرا

پاسخ سوال قرارمون یادت نره! کوئرا

در این نوشته تمرین “قرارمون یادت نره!” که در وب‌سایت کوئرا موجود است را برای شما کاربران عزیز حل کرده‌ایم.

 

پاسخ سوال قرارمون یادت نره! کوئرا

یک شرکت بین‌المللی دارای کارمند در کشورهای مختلف دنیاست. هر یک از این افراد دارای منطقه زمانی خاص خود و نیز ساعات کاری اختصاصی در منطقه زمانی خود هستند. کارکنان این شرکت می‌بایست در ساعات کاریشان در m جلسه کاری شرکت کنند. با توجه به ساعات کاری هر فرد در روز داده شده اولین زمان مناسبی که تمامی افراد جلسه بتوانند در آن حضور پیدا کنند جلسه برگزار می‌شود برای هر جلسه زمان برگزاری آن را بیابید و آن را بر اساس ناحیه زمانی UTC اعلام کنید. در غیر اینصورت عبارت N/A را برای جلسات غیر قابل برگزاری چاپ کنید.

قوانین برگزاری جلسات:

  • یک فرد نمیتواند همزمان در ۲ جلسه حضور پیدا کند
  • یک جلسه در صورتی برگزار می‌شود که همه افراد شرکت کننده در آن جلسه بتوانند به طور کامل در طول ساعت کاری خود در آن حاضر شوند و در غیر اینصورت جلسه لغو می‌شود.
  • اولویت جلسات از زیاد به کم است. یعنی تا زمانی که اولین جلسه تعیین تکلیف نشده، هیچ تصمیمی در مورد جلسات بعدی گرفته نمی‌شود. (این لزوما به این معنی نیست که جلسات به ترتیب زمانی برگزار می‌شوند. ممکن است جلسه اول با توجه به ناحیه زمانی شرکت‌کنندگان آن دیرتر از جلسه دوم برگزار شود. اما در هر صورت تا هر جلسه تعیین تلکیف نشده جلسات بعدی معین نمی‌شوند.)
  • یک جلسه باید در زودترین زمان ممکن در بازه زمانی مجاز برای آن جلسه برگزار شود.
  • همه‌ی جلسات باید در یک روز بر حسب UTC برگزار شوند.

 

ورودی سوال قرارمون یادت نره!

در خط اول ورودی به ترتیب دو عدد و  آمده که نشان دهنده‌ی تعداد کارمندان شرکت و تعداد جلسات است.

سپس در  خط بعدی برای هر کارمند نام او، اختلاف منطقه زمانی او با UTC و شروع و پایان ساعت کاریش آمده. تضمین می‌شود نام کارمندان شرکت متمایز است.

هم‌چنین تضمین می‌شود ساعات داده شده به صورت HH:MM هستند که در آن:

0

در 2m خط بعدی،‌ برای هر جلسه دو خط ورودی داده شده، در خط اول آن به ترتیب اعداد  و t آمده‌اند که نشان دهنده‌ی تعداد افراد در جلسه و مدت زمان جلسه به دقیقه است و در خط بعد از آن رشته‌ی جدا شده با فاصله آمده که نام افراد شرکت کننده در جلسه است. برای جزئیات بیش‌تر به مثال‌ها توجه کنید.

 

خروجی سوال قرارمون یادت نره!

برای هر جلسه اگر امکان برگزاری آن وجود داشت زمان شروع جلسه بر اساس ناحیه زمانی UTC و در غیر این صورت عبارت N/A را چاپ کنید.

 

حل سوال قرارمون یادت نره!

import time
from datetime import timedelta, datetime
p, m = map(int, input().split())

karmand = {}

def isOk(start, end):
    for i in range(start, end+1):
        for k in ks:
            if not karmand[k][i]:
                return False
    for i in range(start, end+1):
        for k in ks:
            karmand[k][i] = False
    return True
        
for i in range(p):
    name, e, start, end = map(str, input().split())
    ee = [int(x) for x in e[1:].split(':')]
    start = datetime.strptime(start, '%H:%M')
    end = datetime.strptime(end, '%H:%M')
    td = timedelta(hours = ee[0], minutes = ee[1])
    
    if e[0] == '+':
        start = start - td
        end = end - td
    else:
        start = start + td
        end = end + td
    
    karmand[name] = [False for j in range(1440)]
    for j in range(start.hour*60+start.minute, end.hour*60+end.minute):
        karmand[name][j] = True
    

for i in range(m):
    c, t = map(int, input().split())
    
    ks = input().split()
    
    oked = False
    for j in range(1440-t+1):
        res = isOk(j, j+t-1)
        if res:
            hh, mm  = str(j // 60), str(j % 60)
            if len(hh) == 1:
                hh = '0' + hh
            if len(mm) == 1:
                mm = '0' + mm
            print(hh + ":" + mm)
            oked = True
            break

    
    if not oked:
        print("N/A")

منبع سوال‌: وبسایت کوئرا

 

اگر روش حل بهتری برای ‌تمرین قرارمون یادت نره!‌ دارید برای ما ارسال کنید تا با نام خودتان به اشتراک بگذاریم.

اگر سوال خاصی را مدنظر دارید در بخش نظرات برای ما ارسال کنید تا حل آن سوال را در الویت محتوای سایت بگذاریم.

برای امتیاز به این نوشته کلیک کنید!
[کل: 0 میانگین: 0]