链接:

https://codeforces.com/contest/1272/problem/B

题意:

Recently you have bought a snow walking robot and brought it home. Suppose your home is a cell (0,0) on an infinite grid.

You also have the sequence of instructions of this robot. It is written as the string s consisting of characters 'L', 'R', 'U' and 'D'. If the robot is in the cell (x,y) right now, he can move to one of the adjacent cells (depending on the current instruction).

If the current instruction is 'L', then the robot can move to the left to (x−1,y);

if the current instruction is 'R', then the robot can move to the right to (x+1,y);

if the current instruction is 'U', then the robot can move to the top to (x,y+1);

if the current instruction is 'D', then the robot can move to the bottom to (x,y−1).

You've noticed the warning on the last page of the manual: if the robot visits some cell (except (0,0)) twice then it breaks.

So the sequence of instructions is valid if the robot starts in the cell (0,0), performs the given instructions, visits no cell other than (0,0) two or more times and ends the path in the cell (0,0). Also cell (0,0) should be visited at most two times: at the beginning and at the end (if the path is empty then it is visited only once). For example, the following sequences of instructions are considered valid: "UD", "RL", "UUURULLDDDDLDDRRUU", and the following are considered invalid: "U" (the endpoint is not (0,0)) and "UUDD" (the cell (0,1) is visited twice).

The initial sequence of instructions, however, might be not valid. You don't want your robot to break so you decided to reprogram it in the following way: you will remove some (possibly, all or none) instructions from the initial sequence of instructions, then rearrange the remaining instructions as you wish and turn on your robot to move.

Your task is to remove as few instructions from the initial sequence as possible and rearrange the remaining ones so that the sequence is valid. Report the valid sequence of the maximum length you can obtain.

Note that you can choose any order of remaining instructions (you don't need to minimize the number of swaps or any other similar metric).

You have to answer q independent test cases.

思路:

从原点出去,再回来,往右边走的布数等同于往左边走的步数,上下同理。

代码:

#include<bits/stdc++.h>
using namespace std; char s[100010]; int main()
{
int t;
cin >> t;
while(t--)
{
cin >> s;
map<char, int> Mp;
int len = strlen(s);
for (int i = 0;i < len;i++)
Mp[s[i]]++;
if (Mp['U'] == 0 || Mp['D'] == 0)
{
if (Mp['L'] > 0 && Mp['R'] > 0)
cout << 2 << endl << "LR" << endl;
else
puts("0");
}
else if (Mp['L'] == 0 || Mp['R'] == 0)
{
if (Mp['U'] > 0 && Mp['D'] > 0)
cout << 2 << endl << "UD" << endl;
else
puts("0");
}
else
{
int row = min(Mp['L'], Mp['R']);
int col = min(Mp['U'], Mp['D']);
cout << 2*(row+col) << endl;
for (int i = 1;i <= row;i++)
cout << "L";
for (int i = 1;i <= col;i++)
cout << "U";
for (int i = 1;i <= row;i++)
cout << "R";
for (int i = 1;i <= col;i++)
cout << "D";
cout << endl;
}
} return 0;
}

最新文章

  1. jsp 微信公众平台 token验证(php、jsp)(转载)
  2. 移动端 :meta标签1万个作用
  3. Android Sutido 编译速度优化
  4. 动态规划——I 记忆化搜索
  5. easyui-layout中的收缩层无法显示标题问题解决
  6. 发送验证码(&#215;&#215;s后重新发送)
  7. Android 开发—— 小工具,大效率
  8. JAVA入门[22]—thymeleaf
  9. C语言第三次博客作业—循环结构
  10. tkinter打招呼
  11. python基础知识6---文件处理
  12. STL基础复习
  13. 本地Oracle客户端11g升级12c导致PowerCenter无法连接ODBC数据源
  14. Java自动内存管理机制学习(二):垃圾回收器与内存分配策略
  15. Netty入门简介
  16. KNN实现手写数字识别
  17. AI 实验--v_JULY_v
  18. SQLException: Column count doesn&#39;t match value count at row 1
  19. 【gitlab】创建ssh 秘钥
  20. 点击一个元素,触发另一个元素的click事件

热门文章

  1. python学习-32 zip函数
  2. 【实战经验】STM32烧录
  3. SSM整合学习 一
  4. Maven聚合项目的创建
  5. Openshift概念
  6. SQL server字符串分割成表-表分割为字符串
  7. selenium自学笔记---下拉框定位元素select
  8. Python进阶(十一)----包,logging模块
  9. SQL Injection (Blind)
  10. 使pre的内容自动换行(转)小知识