B

题意:给出一段表方向的字符串,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]!='';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
");
                                        printf("LR");
                                }else   printf("0");
                        }else if(l==0||r==0){
                                if(u!=0&&d!=0){
                                        printf("2
");
                                        printf("UD");
                                }else   printf("0");
                        }else{
                                if(u>d) smin=d;
                                else    smin=u;
                                if(l>r) hmin=r;
                                else    hmin=l;
                                printf("%d
",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("
");
                }
        }
}
View Code

   

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