Universal Cup Judging System

Universal Cup

Time Limit: 3 s Memory Limit: 2048 MB Total points: 100 Difficulty: [show] Interactive Hackable ✓
Statistics

C'est un problème interactif. Pensez à vider le tampon de sortie après chaque affichage. Pour cela, vous pouvez utiliser :

  • fflush(stdout) ou cout.flush() en C/C++ ;
  • System.out.flush() en Java et Kotlin ;
  • sys.stdout.flush() en Python ;
  • Consultez la documentation pour les autres langages.

Little Cyan Fish possède une permutation secrète $p_0,p_1,\ldots,p_n$ de longueur $n+1$, composée des entiers de $0$ à $n$. Il souhaite que vous deviniez cette permutation secrète. Pour cela, Little Cyan Fish vous autorise à effectuer au plus $1024$ requêtes de la forme suivante :

  • ? i j : Obtenez l'indice $k$ ($0\le k\le n$) tel que $p_k=|p_i-p_j|$.

Bien entendu, pour qu'une requête soit valide, vous devez garantir que $i$ et $j$ sont deux entiers dans $[0,n]$. Par exemple, si $p_0=2,p_1=0,p_2=1$, la requête ? 0 2 renverra l'indice $2$, car $|p_0-p_2|=|2-1|=1=p_2$.

Little Cyan Fish souhaite que vous élaboriez une stratégie pour trouver la permutation. Bien entendu, il ne veut pas que vous gagniez trop facilement. Il modifiera donc la permutation $p$ de manière adaptative pour vous piéger (voir « Interaction » pour plus de détails).

Entrée

Il y a plusieurs cas de test. La première ligne de l'entrée contient un unique entier $T$ ($1\le T\le100$), indiquant le nombre de cas de test.

Pour chaque cas de test, la première ligne de l'entrée contient un unique entier $n$ ($1\le n\le1000$). L'interaction commence ensuite.

Interaction

Pour effectuer une requête, affichez une ligne au format suivant :

$$?\ i\ j$$

Ici, $i$ et $j$ sont deux entiers de $0$ à $n$. Vous devez garantir que le nombre de requêtes ne dépasse pas $1024$. En réponse, vous recevrez un entier $k$ tel que $p_k=|p_i-p_j|$.

Pour annoncer la réponse, affichez une ligne au format suivant :

$$!\ p_0\ p_1\ \ldots\ p_n$$

Ici, $p$ est la permutation que vous souhaitez annoncer.

Après avoir affiché une requête ou annoncé la réponse, n'oubliez pas d'afficher un saut de ligne et de vider le flux de sortie.

Dans ce problème, l'interacteur est adaptatif. Cela signifie que la permutation $p$ peut changer selon vos requêtes, tant qu'elle ne contredit pas les requêtes précédentes.

Exemples

Exemple d'interaction 1

Lecture:

1
3

Écriture:

? 2 2

Lecture:

1

Écriture:

? 0 3

Lecture:

3

Écriture:

! 2 0 3 1

Outil de test : Un outil est fourni pour aider les participants à développer et tester leurs solutions. Vous pouvez le télécharger depuis les pièces jointes. Son exécution avec l'option -h devrait expliquer son utilisation. L'outil ne met en œuvre que certains scénarios de test et une partie des fonctionnalités du véritable programme d'évaluation.

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.