Universal Cup Judging System

Universal Cup

حد الوقت: 2.0 s حد الذاكرة: 1024 MB مجموع النقاط: 100 قابلة للهجوم ✓
الإحصائيات

Comme vous le savez, vous participez au Concours Chinois de Problèmes Constructifs (Chinese Constructive Problem Contest, CCPC), et sans aucun doute, l'université organisatrice, l'Université Sun Yat-sen, en tant que Royaume de la Construction, a très hâte de vous voir relever certains défis liés à ce thème.

Little U est étudiant au Royaume de la Construction. Lors d'un cours d'algorithmique, Little U a découvert le problème MCOP (Matrix Chain Ordering Problem, ou problème d'ordonnancement de chaînes de matrices). Voici une présentation de MCOP :

On donne en entrée de l'algorithme une suite d'entiers strictement positifs de longueur $n \ge 3$, $[w_1, w_2, \dots, w_n]$. La formule suivante multiplie $n - 1$ matrices pour obtenir finalement une nouvelle matrice :

$$M = M_1 \times M_2 \times \cdots \times M_{n-1}$$

où $M_i$ est une matrice de taille $w_i \times w_{i+1}$. La multiplication matricielle étant associative, changer l'ordre des multiplications donne la même matrice finale $M$, mais le nombre d'opérations peut varier. L'objectif du problème est de trouver une stratégie de multiplication optimale parmi les $(n - 2)!$ stratégies possibles, de sorte que le nombre total d'opérations nécessaires à la multiplication des matrices soit minimisé. On suppose ici que multiplier deux matrices de tailles $p \times q$ et $q \times r$ produit une matrice de taille $p \times r$ et nécessite $pqr$ opérations. Le nombre total minimal d'opérations requis pour calculer $M$ selon la stratégie optimale est noté $\text{MCOP}([w_1, w_2, \dots, w_n])$.

Little U a appris en cours comment résoudre ce problème avec une complexité temporelle suffisamment bonne, mais en tant qu'étudiant du Royaume de la Construction, Little U a naturellement pensé au problème suivant :

Soit un entier $X$ vérifiant $1 \le X \le 10^9$. Vous devez construire une suite d'entiers de longueur $l$, $[a_1, a_2, \dots, a_l]$, qui respecte les conditions suivantes :

  • $3 \le l \le 6$ ;
  • Pour tout $i \in [1, l]$, $1 \le a_i \le 4000$ ;
  • $\text{MCOP}([a_1, a_2, \dots, a_l]) = X$.

Little U a déjà implémenté un vérificateur (checker) à l'aide de l'algorithme vu en cours ; ce qu'il vous reste à faire est de résoudre ce problème de construction.

Entrée

Ce problème contient plusieurs jeux de tests. La première ligne de l'entrée contient un entier $T$ ($1 \le T \le 500$), représentant le nombre de jeux de tests.

Pour chaque jeu de tests, l'entrée consiste en une seule ligne contenant un entier $X$ ($1 \le X \le 10^9$), dont la signification a été donnée dans l'énoncé.

Sortie

Pour chaque jeu de tests : affichez d'abord une ligne contenant un entier $l$ ($3 \le l \le 6$), représentant la longueur de la suite construite. Puis affichez une ligne contenant $l$ entiers, représentant la suite construite.

On peut prouver que pour toute entrée $X$, il existe toujours une construction qui respecte les conditions. S'il existe plusieurs constructions valides, affichez n'importe laquelle d'entre elles.

Exemple

Entrée d'exemple 1

2
90
10

Sortie d'exemple 1

4
5 3 2 6
3
1 1 10

Remarque

Pour le premier jeu de tests, la suite construite est $[5, 3, 2, 6]$, ce qui représente la multiplication en chaîne de trois matrices de tailles $5 \times 3$, $3 \times 2$ et $2 \times 6$. Considérons deux stratégies de multiplication :

  • Multiplier d'abord $M_1$ et $M_2$ pour obtenir une matrice de taille $5 \times 2$, puis multiplier par $M_3$, ce qui correspond à l'expression $(M_1 \times M_2) \times M_3$. Le nombre total d'opérations est alors $5 \times 3 \times 2 + 5 \times 2 \times 6 = 90$ ;
  • Multiplier d'abord $M_2$ et $M_3$ pour obtenir une matrice de taille $3 \times 6$, puis multiplier par $M_1$, ce qui correspond à l'expression $M_1 \times (M_2 \times M_3)$. Le nombre total d'opérations est alors $3 \times 2 \times 6 + 5 \times 3 \times 6 = 126$.

Ici, l'objectif est de minimiser le nombre total d'opérations, donc $\text{MCOP}([5, 3, 2, 6]) = \min(90, 126) = 90$.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.