B - Snow Walking Robot

题意:给出一段表方向的字符串,u、d、l、r分别表示向上、向下、向左、向右,让你重新排列,使其走出去再回到原点,除了原点能走两次以外其他点都只能走一次,输              出走的次数和走法。

思路:最简单的走法:就是绕一圈,先全是上,再全是右,全是下,全是左,即上的次数==下的次数,左的次数==右的次数,求两组对应方向的较小值,两值之和的两倍            即是走的次数。

   有一个方向出现次数是0,则对应的反方向则也为0,另外两个方向就只能各一个,例如:上出现次数是0,则只有一种情况,向左走,再向右走回原点,结束。

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
int main(){
        int q,l,r,u,d,hmin,smin,i;
        char a[int(1e5+5)];
        while(~scanf("%d%*c",&q)){
                while(q--){
                        gets(a);
                        l=r=u=d=0;
                        for(i=0;a[i]!=‘\0‘;i++){
                                if(a[i]==‘U‘) u++;
                                if(a[i]==‘D‘) d++;
                                if(a[i]==‘L‘) l++;
                                if(a[i]==‘R‘) r++;
                        }
                        if(u==0||d==0){
                                if(l!=0&&r!=0){
                                        printf("2\n");
                                        printf("LR");
                                }else   printf("0");
                        }else if(l==0||r==0){
                                if(u!=0&&d!=0){
                                        printf("2\n");
                                        printf("UD");
                                }else   printf("0");
                        }else{
                                if(u>d) smin=d;
                                else    smin=u;
                                if(l>r) hmin=r;
                                else    hmin=l;
                                printf("%d\n",2*(smin+hmin));
                                for(i=0;i<smin;i++)
                                        printf("U");
                                for(i=0;i<hmin;i++)
                                        printf("R");
                                for(i=0;i<smin;i++)
                                        printf("D");
                                for(i=0;i<hmin;i++)
                                        printf("L");
                        }
                        printf("\n");
                }
        }
}

   

原文地址:https://www.cnblogs.com/DreamingBetter/p/12189445.html

时间: 2024-11-06 11:42:29

B - Snow Walking Robot的相关文章

【Leetcode_easy】874. Walking Robot Simulation

problem 874. Walking Robot Simulation 参考 1. Leetcode_easy_874. Walking Robot Simulation; 完 原文地址:https://www.cnblogs.com/happyamyhope/p/11252142.html

874.Walking Robot Simulation(list不可被哈希)

A robot on an infinite grid starts at point (0, 0) and faces north. The robot can receive one of three possible types of commands: -2: turn left 90 degrees -1: turn right 90 degrees 1 <= x <= 9: move forward x units Some of the grid squares are obst

874. Walking Robot Simulation

A robot on an infinite grid starts at point (0, 0) and faces north.  The robot can receive one of three possible types of commands: -2: turn left 90 degrees -1: turn right 90 degrees 1 <= x <= 9: move forward x units Some of the grid squares are obs

[LeetCode] Walking Robot Simulation 走路机器人仿真

A robot on an infinite grid starts at point (0, 0) and faces north.? The robot can receive one of three possible types of commands: -2: turn left 90 degrees -1: turn right 90 degrees 1 <= x <= 9: move forward?x?units Some of the grid squares are obs

Codeforces 1154D - Walking Robot - [贪心]

题目链接:https://codeforces.com/contest/1154/problem/D 题解: 贪心思路,没有太阳的时候,优先用可充电电池走,万不得已才用普通电池走.有太阳的时候,如果可充电电池能够充一格电,就用普通电池跑(让可充电池充电),否则就用可充电电池走. AC代码: #include<bits/stdc++.h> using namespace std; const int maxn=2e5+10; int n,a,b; bool s[maxn]; int main()

Codeforces 1296C - Yet Another Walking Robot

题目大意: 给定一个机器人的行走方式 你需要取走一段区间 但要保证取走这段区间后机器人最终到达的终点位置是不变的 问这段区间最短时是哪一段 解题思路: 易得,如果重复走到了某些已经走过的点,那么肯定就有一段区间可以被删除 但是行走次数最大有2e5,即用数组记录坐标状态的话起码要开4e5*4e5的空间,显然不可能 所以可以用map储存上一次走到某个坐标是第几步 那么每次只要判断当前的坐标是否已经被走过即可,走过的话就尝试更新答案 因为map中未调用过的int值为0 所以让原点的步数设置为1防止混淆

Codeforces Round #617 (Div. 3) C. Yet Another Walking Robot

http://codeforces.com/contest/1296/problem/C 题意:给一段字符串表示移动,然后求删除最短的一段,并且不影响结果 题解: 意思是:建立pair点和map,当遍历到第i个点有一个pair值,把这个加到map里面,如果向后接着遍历时出现与i点相同的pair值时,那么这一段表示可以删除的一段 #include <bits/stdc++.h> using namespace std; int main() { #ifdef _DEBUG freopen(&qu

Codeforces Round #605 (Div. 3)

地址:http://codeforces.com/contest/1272 A. Three Friends 仔细读题能够发现|a-b| + |a-c| + |b-c| = |R-L|*2 (其中L = min{a, b, c}, R = max{a, b, c}) 那么本题的移动条件就只考虑两个端点L, R即可,答案即为 |(L+1)-(R-1)| 即L向右移动1,R向左移动1,在此之前判断一下原L,R之间的距离是否<=2,<=2输出0 #include <bits/stdc++.h&

CF1272 B DIV3 ---代码对比

这次DIV3有点可惜啊,题解是我的与学长的代码对比 学长的原博客https://www.cnblogs.com/xyq0220/p/12036109.html B.Snow Walking Robot time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Recently you have bought a snow walking