ConcursC++17

poly

Un polyomino este o figură geometrică plană compactă formată din una sau mai multe piese de domino, pătrate egale de latură 11. Două piese se consideră alăturate dacă au o latură comună.

Exemple de Polyominouri cu nn piese:

Figura 1 din enunțul original al problemei poly.Figura 1 din enunțul original al problemei poly.Mărește schema ↗

Două Polyominouri se consideră identice dacă sunt formate din acelaşi număr de piese şi au aceeaşi configuraţie sau configuraţia unuia se poate obţine prin oglindirea celuilalt. În caz contrar cele două Polyominouri se consideră distincte.

Polyominouri distincteFigura 2 din enunțul original al problemei poly.Figura 2 din enunțul original al problemei poly.Mărește schema ↗Polyominouri care nu sunt distincteFigura 3 din enunțul original al problemei poly.Figura 3 din enunțul original al problemei poly.Mărește schema ↗

Un polyomino poate fi rotit cu 90∘{90^{ \large \circ }}, 180∘{180^{ \large \circ }} şi 270∘{270^{ \large \circ }}, în sens trigonometric. Prin rotaţie se obţin alte Polyominouri, nu neapărat identice cu cel inţial.

Exemplu:

Prin rotaţia polyomino-uluiFigura 4 din enunțul original al problemei poly.Figura 4 din enunțul original al problemei poly.Mărește schema ↗se obţin:Figura 5 din enunțul original al problemei poly.Figura 5 din enunțul original al problemei poly.Mărește schema ↗

Niciunul dintre aceste Polyominouri nu este identic cu cel iniţial.

Un polyomino este convex dacă prin parcurgerea succesivă a linilor sau coloanelor nu se întâlnesc găuri.

Polyomino convexFigura 6 din enunțul original al problemei poly.Figura 6 din enunțul original al problemei poly.Mărește schema ↗Polyominouri neconvexeFigura 7 din enunțul original al problemei poly.Figura 7 din enunțul original al problemei poly.Mărește schema ↗

Un polyomino este oblic convex (skew polyomino) dacă este convex şi prin parcurgerea succesivă a coloanelor de la stânga la dreapta acestea nu descresc în înălţime. Altfel spus, partea de jos a coloanei din stânga este întotdeauna mai mică sau egală ca înălţime cu partea de jos a coloanei din dreapta. În mod similar, partea de sus a coloanei din stânga este întotdeauna mai mică sau egală cu partea de sus a coloanei din dreapta.

Exemple:

Polyominouri obliceFigura 8 din enunțul original al problemei poly.Figura 8 din enunțul original al problemei poly.Mărește schema ↗Polyominouri care nu sunt obliceFigura 9 din enunțul original al problemei poly.Figura 9 din enunțul original al problemei poly.Mărește schema ↗

Cerință

Să se determine numărul de Polyominouri oblice distincte care au perimetrul egal cu 2⋅N+22 \cdot N+2. Acest număr poate să fie mare, de aceea ne interesează rezultatul modulo 30 10330 \ 103.

Date de intrare

Fişierul de intrare poly.in conţine pe prima linie un număr natural NN.

Date de ieșire

Fişierul de ieşire poly.out conţine pe prima linie un număr natural ce reprezintă numărul de Polyominouri oblice care au perimetrul egal cu 2⋅N+22 \cdot N+2, număr afişat modulo 30 10330 \ 103.

Restricții și precizări

  • 2≤N≤5002 \leq N \leq 500

Exemplu

poly.in

3

poly.out

5

Explicație

Sunt 55 Polyominouri care respectă cerinţa:

Figura 10 din enunțul original al problemei poly.Figura 10 din enunțul original al problemei poly.Mărește schema ↗

Sursă și autori

ONI 2012, clasele 10. Eugen Nodea, Marius Laurențiu Stroe.

Enunț din Kilonova, sub licența CC-BY-NC-SA-4.0, conform politicii sursei. Adaptări de prezentare și tipografie. Exemplele, formulele și figurile originale sunt păstrate.

RÂNDUL TĂU

Trimite o soluție

Editor de cod

Setul original de teste și regulile de punctare sunt în curs de verificare. Trimiterea pentru evaluare va fi disponibilă după această verificare.

Se verifică autentificarea…

Un pas, apoi următorul.Înapoi sus ↑