QOJ.ac

QOJ

حد الوقت: 1 s حد الذاكرة: 256 MB مجموع النقاط: 100 الصعوبة: [عرض]

#18232. APLSPC

الإحصائيات

Bienvenue à SFLSPC !

À l'école de langue des manchots de l'Antarctique, les manchots s'entraînent chaque année à compacter leur code et à optimiser leurs constantes.

Un manchot « oo » est un espion envoyé par l'école de langue des ours polaires de l'océan Arctique ! Il s'est infiltré dans cette compétition, tentant de transformer l'APLS en une colonie d'ours polaires !

Un manchot travailleur et courageux a non seulement déjoué les plans subversifs des méchants manchots polaires, mais a aussi généré toutes les données de l'APLSPC. Dites vite : merci le manchot.

Un grand manchot, très grand, est l'empereur de l'école de langue des manchots de l'Antarctique.

Un manchot « dudu » est très « dudu ». Il vous a envoyé des documents d'apprentissage « dududu » pour que vous les étudiiez.

Un manchot « tangtang » a écrit un code en $O(n\log n)$ qui n'a pas réussi à passer dans la limite de temps de 2s pour $n\le 5\times 10^5$. Très en colère, il a décidé de se venger de la société en créant ce problème.

Énoncé

Vous devez écrire un code qui, pour les langages requis, satisfait les conditions suivantes :

  1. Sous les instructions de compilation du langage, il peut s'exécuter normalement et afficher son propre code source ;
  2. Il ne contient aucun mot-clé du langage au sens d'une correspondance de mots entiers (si vous ne savez pas ce qu'est une correspondance de mots entiers, veuillez vous référer à la section Détails d'implémentation).

Ces deux exigences doivent être satisfaites à la fois pour C++ et Python. En d'autres termes, ce code doit être simultanément un code C++ valide et un code Python valide, tout en respectant les exigences ci-dessus.

Dans ces conditions, votre code doit être aussi court que possible.

Si votre code remplit toutes les conditions et que sa longueur ne dépasse pas 250B, vous obtiendrez $100$ points. Si votre code ne remplit pas certaines conditions, vous pouvez tout de même obtenir des points, voir la section Notation pour plus de détails.

Attention, nous utiliserons des moyens pour garantir que votre code n'a pas accès au fichier source dans le répertoire d'exécution ; vous ne pouvez pas et ne devez pas tenter d'accéder au fichier source pour accomplir la tâche.

Si vous n'êtes pas familier avec la syntaxe, vous pouvez visiter python.org ou cppreference.com pour obtenir des informations pertinentes.

Détails d'implémentation

Votre code ne doit pas contenir de caractères non ASCII, sinon le résultat est indéfini.

Tout d'abord, tous les sauts de ligne de votre code seront forcés en CRLF (\r\n), donc un saut de ligne occupe deux octets.

Ensuite, le système de test appellera séparément les instructions suivantes pour exécuter votre code :

/usr/bin/g++ code.cpp -std=c++2a -O2 -o code && ./code
python3 code.cpp

Ensuite, le système de test utilisera l'instruction suivante pour déterminer si votre code affiche son propre contenu :

diff --strip-trailing-cr code.cpp out

Cette instruction traite les CRLF en fin de ligne comme des LF, ce qui signifie que vous n'avez pas à vous soucier des sauts de ligne spéciaux lors de l'affichage.

En dehors de cela, cette instruction effectue une comparaison strictement rigoureuse, ce qui signifie que les espaces en fin de ligne et autres caractères d'espacement doivent être parfaitement identiques.

Enfin, le système de test vérifiera si votre code contient des mots-clés à partir de la liste fournie, en utilisant une correspondance de mots entiers. La définition d'une correspondance de mots entiers est que les caractères précédant et suivant la position de correspondance ne sont ni des chiffres, ni des lettres, ni des traits de soulignement. Par exemple, int peut correspondre à (int), mais ne peut pas correspondre à print. La liste des mots-clés est jointe à la fin du problème.

Il est particulièrement important de noter que la limite de temps indiquée n'a pas de sens, la limite réelle est de 1000ms. Si votre code dépasse 1000ms, il sera arrêté de force, mais le temps d'exécution et l'espace mémoire ne seront pas reflétés dans le résultat de l'évaluation.

Notation

Définissez votre score préliminaire $s_0$ :

  • Peu importe si le code contient des mots-clés, si votre code est un code C++ valide et affiche son propre contenu lors de l'exécution en C++, mais n'est pas un code Python valide, $s_0=2$.

  • Peu importe si le code contient des mots-clés, si votre code est à la fois un code C++ et Python valide, et affiche son propre contenu lors de l'exécution en C++, mais pas en Python, $s_0=10$.

  • Peu importe si le code contient des mots-clés, si votre code est à la fois un code C++ et Python valide et affiche son propre contenu dans les deux langages, soit $x$ la longueur de votre code,

$$ s_0=f(x)= \begin{cases} 20&(x\ge10^4)\\ 45-\frac{x}{400}&(2000\le x<10^4)\\ \frac{200}{3}-\frac{x}{75}&(500\le x<2000)\\ 135-\frac{3x}{20}&(300\le x<500)\\ 150-\frac{x}{5}&(x<300) \end{cases} $$

  • Dans les autres cas, $s_0=0$.

$f(x)$ est une fonction continue. Notez que $s_0$ peut être supérieur à $100$.

Enfin, si votre code ne contient aucun mot-clé, votre score final est $\lfloor\min(100,s_0)\rfloor$, sinon il est $\lfloor\min(70,0.7s_0)\rfloor$.

Liste des mots-clés

Voici la liste des mots-clés C++ :

{
    "alignas", "alignof", "and", "and_eq", "asm", "auto", "bitand", "bitor", "bool", "break",
    "case", "catch", "char", "char8_t", "char16_t", "char32_t", "class", "compl", "concept",
    "const", "consteval", "constexpr", "constinit", "const_cast", "continue", "co_await",
    "co_return", "co_yield", "decltype", "default", "delete", "do", "double", "dynamic_cast",
    "else", "enum", "explicit", "export", "extern", "false", "float", "for", "friend", "goto",
    "if", "inline", "int", "long", "mutable", "namespace", "new", "noexcept", "not", "not_eq",
    "nullptr", "operator", "or", "or_eq", "private", "protected", "public", "register",
    "reinterpret_cast", "requires", "return", "short", "signed", "sizeof", "static",
    "static_assert", "static_cast", "struct", "switch", "synchronized", "template", "this",
    "thread_local", "throw", "true", "try", "typedef", "typeid", "typename", "union", "unsigned",
    "using", "virtual", "void", "volatile", "wchar_t", "while", "xor", "xor_eq"
}

Voici la liste des mots-clés Python :

{
    "False", "None", "True", "and", "as", "assert", "async", "await", "break", "class",
    "continue", "def", "del", "elif", "else", "except", "finally", "for", "from", "global",
    "if", "import", "in", "is", "lambda", "nonlocal", "not", "or", "pass", "raise", "return",
    "try", "while", "with", "yield", "match", "case"
}

Remarque

  • La fonction main en C++ peut ne pas définir de type de retour. Ainsi, le code suivant est un code C++ valide :
main(){}

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.