Universal Cup Judging System

Universal Cup

Time Limit: 2 s Memory Limit: 1024 MB
Statistics

Ce problème comporte une pièce jointe. Vous pouvez l'utiliser pour simuler et visualiser les déplacements du robot.

problem_23603_b923d7f472cb2d50f053c89f0e9688e6.png

VegiCat possède un robot sur une grille bidimensionnelle infinie. Il souhaite le faire aller de la case $s = (s_x, s_y)$ à la case $t = (t_x, t_y)$. Chaque case a des coordonnées entières. Les cases $s$ et $t$ peuvent être identiques.

Le robot suit une chaîne d'instructions $p$. Chaque caractère est L, R, U ou D. Soit $|p|$ la longueur de $p$.

Le robot commence en $s$. Avant qu'il n'exécute la moindre instruction, vous pouvez placer au plus $|p|$ obstacles dans des cases distinctes. Les coordonnées $(x, y)$ de chaque obstacle doivent vérifier $-2 \cdot 10^9 \le x, y \le 2 \cdot 10^9$. Ni $s$ ni $t$ ne peuvent contenir d'obstacle. Chaque obstacle occupe une case et reste fixe tout au long du processus ; toutes les autres cases sont libres d'obstacles.

Le robot exécute les instructions $p_1, p_2, \ldots, p_{|p|}$ dans l'ordre. Pour chaque instruction, en partant de sa case actuelle $(x, y)$, il se déplace le long de la séquence de cases suivante :

  • L: $(x, y) \to (x - 1, y) \to (x - 2, y) \to \cdots$;
  • R: $(x, y) \to (x + 1, y) \to (x + 2, y) \to \cdots$;
  • U: $(x, y) \to (x, y + 1) \to (x, y + 2) \to \cdots$;
  • D: $(x, y) \to (x, y - 1) \to (x, y - 2) \to \cdots$.

Le robot avance de façon répétée d'une case dans la direction indiquée tant que la case suivante ne contient pas d'obstacle. Il s'arrête dans la case située immédiatement avant le premier obstacle dans cette direction. Si la case suivante dans la direction indiquée contient déjà un obstacle avant le début de l'instruction, le robot reste sur place, mais l'instruction est tout de même terminée. S'il n'y a aucun obstacle devant lui dans cette direction, le robot se déplacerait indéfiniment, et le placement est invalide.

Le robot peut atteindre $t$ avant que toutes les instructions ne soient terminées. Il doit tout de même exécuter toutes les instructions restantes. Construisez n'importe quel placement d'obstacles satisfaisant les conditions ci-dessus tel que le robot termine en $t$ après la dernière instruction, ou indiquez qu'aucun tel placement n'existe.

Entrée

La première ligne contient un entier $T$ ($1 \le T \le 10^5$), le nombre de cas de test. La description des cas de test suit.

La première ligne de chaque cas de test contient deux entiers $s_x$ et $s_y$ ($-10^9 \le s_x, s_y \le 10^9$), les coordonnées de la case de départ.

La deuxième ligne contient deux entiers $t_x$ et $t_y$ ($-10^9 \le t_x, t_y \le 10^9$), les coordonnées de la case cible.

La troisième ligne contient la chaîne d'instructions $p$ ($1 \le |p| \le 10^5$), constituée uniquement des caractères L, R, U et D.

Il est garanti que la somme de $|p|$ sur l'ensemble des cas de test ne dépasse pas $10^5$.

Sortie

Pour chaque cas de test, affichez une réponse dans l'ordre de l'entrée. Les placements d'obstacles pour différents cas de test sont indépendants.

S'il n'existe aucun placement valide, affichez NO seul sur une ligne.

Sinon, affichez YES sur la première ligne. Sur la deuxième ligne, affichez un entier $k$ ($0 \le k \le |p|$), le nombre d'obstacles.

Affichez ensuite $k$ lignes. La $i$-ème de ces lignes doit contenir deux entiers $x_i$ et $y_i$ ($-2 \cdot 10^9 \le x_i, y_i \le 2 \cdot 10^9$), indiquant un obstacle dans la case $(x_i, y_i)$.

Les $k$ couples de coordonnées doivent tous être distincts, et aucun ne peut être égal à $s$ ou $t$. Le placement doit permettre à chaque instruction de se terminer et laisser le robot en $t$ après la dernière instruction. S'il existe plusieurs solutions, affichez n'importe laquelle d'entre elles.

Vous pouvez afficher le verdict yes ou no dans n'importe quelle casse. Par exemple, yEs, yes, Yes et YES sont tous acceptés comme réponses positives.

Exemples

Entrée 1

6
0 0
1 0
RL
0 0
-1 0
URD
0 0
8 0
RLR
0 0
0 0
UDUD
0 0
2 5
RDULR
0 0
1 1
RURURU

Sortie 1

NO
NO
YES
2
-1 0
9 0
YES
2
0 -1
0 1
YES
5
-1 5
2 -1
2 6
3 0
3 5
YES
3
1 2
2 0
2 1

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.