به یک مستطیل که در هر خانه آن یکی از اعداد 0 یا1 نوشته شده است می گوییم خوب اگر:
شما باید برنامهای بنویسید که تعداد مستطیلهای خوب n×m را بهدست آورد.
به ازای هر مستطیل n×m خوب میتوان اعداد a1,⋯,an و b1,⋯,bm از 0 و 1 را طوری پیدا کرد که عدد درون سطر iام و ستون jام مستطیل برابر باشد با a_i \oplus b_j.
در تنها سطر خروجی پاسخ سوال را چاپ نمایید.
ورودی نمونه | خروجی نمونه |
---|---|
2 2 0 2 0 | 6 |
30 30 0 0 841 | 1 |
پاسخ
از راهنمایی سوال میتوان فهمید که هر مستطیل خوبn \times m را میتوان متناطر کرد با n+m عدد a_1, \cdots, a_n و b_1,\cdots, b_m طوریکه همه اعداد 0 یا 1 باشند و a_1 برابر باشد با 0.
اگر A_i برابر باشد با تعداد xهایی که a_i = x و a_{i+1} =x و B_i برابر تعداد xهایی باشد طوریکه b_i = x و b_{i+1} =x:
مستطیل متناظر با اعدادa_1, \cdots, a_n و b_1,\cdots, b_m دارای A_0 \times B_0 + A_1 \times B_1 زیر مربع 2 \times 2 است که تمام خانههای آن 0 است و دارای A_0 \times B_1 + A_1 \times B_0 زیر مستطیل 2 \times 2 است که تمام خانههای آن 1 است. حال کافیست به ازای (0 \leq i,j,k \leq 30) تعداد رشتههای دودویی به طول i که دارای j تا 00 و k تا 11 هستند را به صورت پویا محاسبه کنیم و با استفاده از آن پاسخ سوال را بهدست بیاوریم.