zoukankan      html  css  js  c++  java
  • Gym 100553J Jokewithpermutation(dfs)

    题意:有n个数(n<=50)写在一行,将两数之间的空格去掉得到一个数字串。根据这个数字串回复原数;

    思路:先求数的个数,当串长度小于10时,均为个位数;当串长度大于9时,存在两位数,剪去9个个位数,同样得到数的个数;

            数的个数也是串中的最大数;

            采用枚举的方法将每个数与串中的位置匹配,属于同一个数的数字对应同一个数;

            输出时,两位数的数字间不加空格;

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    char str[105];
    int len,mark;
    int vis[505];
    void dfs(int n)
    {
        if(n==0)
        {
            mark=1;return;
        }
        if(mark) return;
        if(n>=10)
        {
            char temp1=n/10+'0';
            char temp2=n%10+'0';
            for(int i=0;i<len-1;i++)
            {
                if(!vis[i]&&!vis[i+1]&&str[i]==temp1&&str[i+1]==temp2)
                {
                    vis[i]=n;
                    vis[i+1]=n;
                     dfs(n-1);
                     if(mark) return;
                     vis[i]=0;
                     vis[i+1]=0;
                }
            }
    
        }
        else{
            for(int i=0;i<len;i++)
            {
                if(!vis[i]&&(str[i]-'0')==n)
                {
                    vis[i]=n;
                     dfs(n-1);
                     if(mark) return;
                     vis[i]=0;
                }
            }
        }
    }
    int main()
    {
        int i,j,k,num;
        freopen("joke.in","r",stdin);
        freopen("joke.out","w",stdout);
        while(scanf("%s",&str)!=EOF)
        {
            len=strlen(str);
            memset(vis,0,sizeof(vis));
            mark=0;
            if(len<10)
            {
                num=len;
            }
            else
                num=(len-9)/2+9;
            dfs(num);
            printf("%c",str[0]);
            for(i=1;i<len;i++)
            {
                if(vis[i]==vis[i-1])
                    printf("%c",str[i]);
                else printf(" %c",str[i]);
            }printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    SQL语句——入门级
    使用Java Servlet进行简单登录
    Java简单聊天室
    Java网络编程(二)关于Socket的一些个人想法
    Java网络编程(一)
    Java多线程(三)锁对象和线程池
    Java多线程(二)同步与等待唤醒
    Java多线程(一)初步了解
    IO流(三)其他流与File类
    IO流(二)字符流
  • 原文地址:https://www.cnblogs.com/dashuzhilin/p/4639403.html
Copyright © 2011-2022 走看看