هندونه‌خوری


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

حنا وارد مسابقه هندونه‌خوری شده است. در این مسابقه nn هندوانه وجود دارد که به ترتیب با شماره‌های ۱ تا nn نام‌گذاری شده‌اند، ‌هم‌چنین وزن هندوانه iiام، wiw_i است. (وزن هندوانه‌ها متمایز است.)

حنا در هر مرحله از این مسابقه دو هندوانه‌ای که کم‌ترین شماره را دارند را انتخاب می‌کند و هندوانه‌ای که سبک‌تر است را می‌خورد. حنا به این کار ادامه می‌دهد تا فقط یک هندوانه باقی بماند.

بعد از مسابقه حنا به این فکر رفته که آخرین هندوانه چه شماره‌ای داشت اما از آن‌جا که خیلی هندوانه خورده، فکرش کار نمی‌کند. به حنا کمک کنید و با گرفتن wiw_i ها شماره آخرین هندوانه را بگویید.

ورودی🔗

در سطر اول nn تعداد هندوانه‌ها آمده‌ است.

در سطر بعدی w1,w2,,wn w_1, w_2, \ldots, w_n\ آمده‌ است.

1n100 1 \leq n \leq 100 1wi100 1 \leq w_i \leq 100

  • تضمین‌ می‌شود که wiw_i ها متمایز هستند.

خروجی🔗

در تنها سطر خروجی شماره هندوانه باقی مانده را چاپ کنید.

مثال🔗

ورودی نمونه ۱🔗

5
4 3 1 5 2
Plain text

خروجی نمونه ۱🔗

4
Plain text

در این نمونه به ترتیب اتفاق‌های زیر اتفاق می‌افتد.

  • هندوانه‌های ۱ و ۲ انتخاب می‌شوند و هندوانه ۲ چون وزن کم‌تری دارد خورده می‌شود.
  • هندوانه‌های ۱ و ۳ انتخاب می‌شوند و هندوانه ۳ خورده می‌شود.
  • هندوانه‌های ۱ و ۴ انتخاب می‌شوند و هندوانه ۱ خورده می‌شود.
  • هندوانه‌های ۴ و ۵ انتخاب می‌شوند و هندوانه ۵ خورده می‌شود.

در نهایت هندوانه چهار باقی می‌ماند.

ورودی نمونه ۲🔗

5
2 4 5 1 3 
Plain text

خروجی نمونه ۲🔗

3
Plain text

پاکسازی


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

حنا قهرمان مسابقات هندونه‌خوری شده و مقدار زیادی پول جایزه گرفته‌ است. حال حنا می‌خواهد به خانه‌اش برگردد و با پول مسابقات مهمانی بگیرد.

شهر محل زندگی حنا، یک خیابان با nn خانه است که حنا در خانه‌ی ssام زندگی می‌کند و مسابقات هندونه‌خوری در خانه tt ام برگزار می‌شود. او می‌داند در تعدادی از خانه‌ها زورگیر زندگی می‌کند و اگر از آن‌ها رد شود، زورگیر پول حنا را از او می‌گیرند و حنا نمی‌تواند مهمانی بگیرد.

حنا از پلیس کمک می‌خواهد. پلیس‌ها در روز برنامه‌نویس می‌توانند در هر عملیات، یک بازه به طول 2k2^k (kk یک عدد حسابی است) را که همه اعضای آن زورگیر هستند را انتخاب کنند و آن خانه‌ها را پاکسازی کنند.

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

ورودی🔗

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

در سطر دوم یک رشته به طول nn آمده‌است. خانه‌هایی که در آن زورگیر وجود دارد حرف H و بقیه خانه‌ها حرف P هستند. تضمین می‌شود که در خانه‌های ss و tt زورگیر وجود ندارد.

در سطر سوم ss و tt به ترتیب آمده‌اند. 1n1 000 1 \leq n \leq 1\ 000 1s,tn 1 \leq s, t \leq n

خروجی🔗

در تنها سطر خروجی، کمترین تعداد عملیات برای پاکسازی مسیر حنا از زورگیرها را بگویید.

مثال🔗

ورودی نمونه ۱🔗

3
PHP
1 3
Plain text

خروجی نمونه ۱🔗

1
Plain text

در مسیر خانه اول به سوم، تنها در خانه‌ دوم زورگیر وجود دارد که پلیس‌ها طی یک مرحله او را دستگیر می‌کنند.

ورودی نمونه ۲🔗

9
HPPHHPHPH
8 3
Plain text

خروجی نمونه ۲🔗

2
Plain text

در مسیر خانه هشتم به سوم تنها در خانه‌های ۴ و ۵ و ۷ زورگیر وجود دارد که پلیس‌ها طی یک مرحله زورگیر خانه‌ی ۴ و ۵ و در مرحله‌ی بعد زورگیر خانه‌ی ۷ را دستگیر می‌کنند. در حرکت اول یک بازه به طول ۲ و در حرکت دوم یک بازه به طول ۱ پاکسازی شد که طول هر دو بازه توانی از ۲ بود.

زیربازه


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

دوستان حنا برای هدیه تولد او nn شیرینی خریده‌اند و آن‌ها را پشت سر هم روی میز قرار داده‌اند. آن‌ها به حنا گفته‌اند که وزن شیرینی ii ام wiw_i است (ممکن است وزن یک شیرینی منفی باشد!)‌. حالا حنا می‌خواهد یک بازه پشت سر هم از شیرینی‌ها را انتخاب کند و بخورد. اما از آنجایی که حنا رژیم دارد، مجموع وزن شیرینی‌هایی که می‌خورد، نمی‌تواند بیشتر از WW باشد. حنا که گیج شده‌است به شما روی آورده تا به او بیشترین وزن شیرینی که می‌تواند بخورد را بگویید.

توجه کنید که حنا همیشه گزینه شیرینی نخوردن را دارد و جواب حداقل صفر هست.

ورودی🔗

در سطر اول عدد nn و WW به ترتیب آمده‌‌است.

در سطر بعدی w1,w2,,wn\, w_1, w_2, \ldots, w_n به ترتیب آمده‌‌است. 1n3000001 \leq n \leq 300 \, 000 109wi109 -10^9 \leq w_i\leq 10^9 1W109 1 \leq W \leq 10^9

خروجی🔗

بیشینه وزن شیرینی که حنا در مجموع می‌تواند بخورد را خروجی دهید.

مثال🔗

ورودی نمونه ۱🔗

3 7
4 5 3
Plain text

خروجی نمونه ۱🔗

5
Plain text

حنا تنها می‌تواند بازه [2,2][2,2] را انتخاب کند.

ورودی نمونه ۲🔗

5 10
1 1 8 3 1
Plain text

خروجی نمونه ۲🔗

10
Plain text

در اینجا می‌توانیم بازه [1,3][1,3] را انتخاب کنیم.

ورودی نمونه ۳🔗

5 10
13 -1 7 -12 19
Plain text

خروجی نمونه ۳🔗

7
Plain text

در اینجا می‌توانیم بازه [1,4][1,4] را انتخاب کنیم.

جایگشت پدربزرگ


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

پدر حنا برای هدیه تولد او، صندوقچه‌ی پدربزرگش را باز کرده‌است و تکه‌ کد زیر را به او داده‌است. (کد زیر یک شبه‌کد است و می‌توانید درباره شبه‌کد در این‌جا بخوانید.)

procedure old_little_code()
    p := the input array of size n
    s := an empty stack
    a := an array of size 2n
    counter = 1
    for i = 1 to n inclusive do:
        while s is not empty and p[s.top] < p[i] do:
            a[counter] = s.top
            counter += 1
            s.pop()
        end while
        s.push(i)
        a[counter] = s.top
        counter += 1
    end for
    while s is not empty do:
        a[counter] = s.top
        counter += 1
        s.pop()
    end while
    return a
end procedure
Plain text

در کنار این تکه‌ کد، کاغذی پیدا کرده و آن را نیز به حنا می‌دهد. روی کاغذ نوشته شده "به این تکه کد یک جایگشت از اعداد 11 تا nn را دادم و در خروجی اعداد a1,a2,,a2n a_1, a_2, \ldots, a_{2n}\ را گرفتم.". حنا قصد دارد جایگشتی که پدربزرگش به عنوان ورودی به تکه کد داده‌ بود را پیدا کند. به او کمک کنید تا تعداد جایگشت‌های مختلفی که می‌توانند جایگشت پدربزرگش باشند را پیدا کند.

ورودی🔗

در سطر اول عدد nn آمده‌است.

در سطر بعدی، اعداد a1,a2,,a2na_1, a_2, \ldots, a_{2n} به ترتیب آمده‌اند.

تضمین می‌شود که به ازای حداقل یک جایگشت، خروجی داده‌شده تولید می‌شود.

1n200000 1 \leq n \leq 200 \, 000 1ain 1 \leq a_i \leq n

خروجی🔗

در تنها سطر خروجی، باقی‌مانده‌ی تعداد جایگشت‌ها بر 109+710^9 + 7 را چاپ کنید.

مثال🔗

ورودی نمونه ۱🔗

2
1 2 2 1
Plain text

خروجی نمونه ۱🔗

1
Plain text

جایگشت پدربزرگ فقط می‌تواند {2,1}\{2, 1\} باشد.

ورودی نمونه ۲🔗

3
1 2 3 3 2 1
Plain text

خروجی نمونه ۲🔗

1
Plain text

جایگشت پدربزرگ فقط می‌تواند {3,2,1}\{3, 2, 1\} باشد.

ورودی نمونه ۳🔗

4
1 2 2 3 3 1 4 4
Plain text

خروجی نمونه ۳🔗

1
Plain text

جایگشت پدربزرگ فقط می‌تواند {3,1,2,4}\{3, 1, 2, 4\} باشد.

ورودی نمونه ۴🔗

5
1 2 2 3 3 4 5 5 4 1
Plain text

خروجی نمونه ۴🔗

3
Plain text

افراز


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

همان طور که می‌دانید حنا به ریاضیات علاقه خاصی دارد. او برای این که این علاقه را به دوستانش ثابت کند، آن‌ها را به چالش زیر دعوت می‌کند.

هر کدام آن‌ها باید دو عدد nn و kk را انتخاب کنند و سپس حنا تمام دنباله‌های شامل اعداد طبیعی a1,a2,...,am a_1, a_2, ..., a_m\ را که ویژگی‌های زیر را دارند یادداشت می‌کند.

  • 1mn1 \le m \le n
  • 1aik1 \le a_i \le k
  • i=1mai=n\sum_{i=1}^{m} a_i = n

برای مثال اگر n=3n = 3 و k=2k = 2 باشد، حنا دنباله‌های زیر را یادداشت می‌کند.

  • (2,1)(2, 1)
  • (1,2)(1, 2)
  • (1,1,1)(1, 1, 1)

دوستان حنا که از مهارت حنا شگفت زده می‌شوند از او می‌خواهند تا به ازای هر دنباله حاصل‌ضرب اعضایش را محاسبه کند و در نهایت بگوید که چند مقدار متفاوت در این بین وجود دارد (در نمونه بالا این مقدار برابر با ۲ است)؛ اما چون حنا در ضرب کردن کمی مشکل دارد از شما می‌خواهد تا به او کمک کنید و جواب دوستانش را بدهید.

ورودی🔗

در سطر اول nn و kk به ترتیب آمده‌است.

1kn300001 \leq k \leq n \leq 30 \, 000

خروجی🔗

در تنها سطر خروجی باقیمانده جواب مسئله را بر 109+710^9 + 7 چاپ کنید.

مثال🔗

ورودی نمونه ۱🔗

4 2
Plain text

خروجی نمونه ۱🔗

3
Plain text

مقادیر مختلف حاصل‌ضرب در این مثال ۱ و ۲ و ۴ هستند.

ورودی نمونه ۲🔗

5 3 
Plain text

خروجی نمونه ۲🔗

5
Plain text

نابه‌جایی


  • محدودیت زمان: ۳ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

معلم حنا هدیه تولد به او یک درخت ریشه‌دار nn راسی داده که ریشه آن راس شماره 11 است. روی راس شماره ii آن عدد aia_i نوشته‌ شده‌‌است. حنا بعد از یادگرفتن الگوریتم جستجوی عمق اول تکه کد زیر را نوشته است.

b := an array of length n
time := 1

procedure DFS(T, a, v):
    b[time] = a[v]
    time += 1
    label v as visited
    for u in T.neighbors(v) do:
        if not visited[u] do:
            DFS(T, a, u)
        end if
    end for
end procedure

procedure countInversions()
    DFS(T, a, 1)
    return number of inversions in the array b
    /* Number of inversions in the array b is the number of distinct pairs (i, j) such that 1 <= i < j <= n and b[i] > b[j] */
end procedure
Plain text

حنا می‌خواهد تابع countInversions‍ را فراخوانی کند. او می‌داند که خروجی این تابع به ترتیب همسایه‌های هر راس در تابع DFS‍ وابسته است. به او کمک کنید، کمینه خروجی ممکن این تابع را پیدا کند.

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

منظور از نابه‌جایی تعداد جفت‌های 1i<jn1 \le i < j \le n است که ai>aja_i > a_j باشد.

ورودی🔗

در سطر اول ورودی عدد nn آمده‌است.

در سطر دوم، اعداد a1,a2,...,ana_1, a_2, ..., a_n به ترتیب آمده‌اند.

در سطر سوم، اعداد p2,p3,...,pnp_2, p_3, ..., p_n، به ترتیب آمده‌اند که pip_i پدر راس شماره ii درخت معلم است.

1n1000000 1 \leq n \leq 1 \, 000 \, 000 0ai2 0 \leq a_i \leq 2 1pi<i 1 \leq p_i < i

خروجی🔗

در سطر اول خروجی، کمینه خروجی تابع countInversions را چاپ کنید.

مثال🔗

ورودی نمونه ۱🔗

6
0 0 2 0 0 2
1 2 3 2 2
Plain text

خروجی نمونه ۱🔗

1
Plain text

ورودی نمونه ۲🔗

8
0 1 1 2 1 0 1 2
1 2 2 1 1 2 3
Plain text

خروجی نمونه ۲🔗

0
Plain text

ورودی نمونه ۳🔗

10
2 0 1 1 1 2 1 0 0 0
1 2 2 1 5 5 5 5 5
Plain text

خروجی نمونه ۳🔗

16
Plain text

دو درخت


  • محدودیت زمان: ۳ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

بعد از یک کلاس ریاضیات سخت، حنا برای تفریح به همراه بنا به جنگل رفته است. حنا و بنا هر کدام یک درخت (گراف بدون دور و همبند) ریشه‌دار nn راسی انتخاب کرده‌اند. آن‌ها به یک دنباله از اعداد مانند V1,V2,...,VKV_1, V_2, ..., V_K علاقه دارند اگر هر دو شرط زیر برقرار باشد:

  • در درخت حنا، به ازای هر 1i<K1 \leq i < K راس ViV_i جد راس Vi+1V_{i+1} است.
  • در درخت بنا، به ازای هر 1i<K1 \leq i < K راس Vi+1V_{i+1} جد راس ViV_i است.

آن‌ها عاشق یک دنباله هستند اگر هر دو شرط زیر برقرار باشد:

  • به این دنباله علاقه داشته باشند.
  • هیچ دنباله‌ای با طول بیشتر از این دنباله وجود نداشته باشد که به آن علاقه داشته باشند.

در یک درخت ریشه‌دار، به راس vv جد راس uu می‌گوییم اگر یکی از دو شرط زیر برقرار باشد:

  • راس vv پدر راس uu باشد.
  • راس vv جد پدر راس uu باشد.

طول بزرگ‌ترین دنباله‌ای که حنا و بنا به آن علاقه دارند، و تعداد دنباله‌هایی که آن‌ها عاشق آن هستند، چقدر است؟

ورودی🔗

در سطر اول ورودی، عدد nn آمده‌است.

در n1n - 1 سطر بعدی یال‌های درخت حنا آمده‌است. در ii امین سطر viv_i و uiu_i دو سر یال ii ام در درخت حنا آمده‌است. ریشه درخت حنا راس شماره 11 است.

در n1n - 1 سطر بعدی یال‌های درخت بنا آمده‌است. در ii امین سطر viv_i و uiu_i دو سر یال ii ام در درخت بنا آمده‌است. ریشه درخت بنا راس شماره nn است.

1n200000 1 \leq n \leq 200 \, 000 1vi,uin 1 \leq v_i, u_i \leq n

خروجی🔗

در تنها سطر خروجی، طول بزرگ‌ترین دنباله‌ای که حنا و بنا به آن علاقه دارند و باقیمانده تعداد دنباله‌هایی که آن‌ها عاشق آن هستند را بر 109+710^9 + 7 چاپ کنید.

مثال🔗

ورودی نمونه🔗

5
4 2
3 1
5 4
2 1
4 5
1 5
3 4
2 5
Plain text

خروجی نمونه🔗

2 3
Plain text