zoukankan      html  css  js  c++  java
  • 置换的玩笑——DFS&&暴力

    题目

    链接

    题意:一个$1$到$n$的序列被去掉空格,需要将其还原。例如$4111109876532$可还原成$4 1   11   10   9   8   7   6   5   3   2$。字符串的长度在$1$到$100$之间。

    解决方法

    由于是1到n的序列,根据长度可以求出n。

    由于长度不超过100,所以n不超过54,即最多两位数。因此只需分别取首部的1位和2位,进行记录,对剩下的递归。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn = 100+10;
     5 char s[maxn];
     6 int n, len;
     7 
     8 int getnum1(int index)
     9 {
    10     return s[index] - '0';
    11 }
    12 int getnum2(int index)
    13 {
    14     return (s[index] - '0') * 10 + s[index + 1] - '0';
    15 }
    16 
    17 int res[maxn];
    18 bool vis[maxn];
    19 int cnt = 0;
    20 bool dfs(int index)
    21 {
    22     if(index >= len)
    23     {
    24         bool flag = true;
    25         for(int i = 1; i < n;i++)
    26             if(!vis[i])  flag = false;
    27         if(flag)
    28         {
    29             for(int i = 0;i < cnt;i++)
    30                 printf("%d%c", res[i], i == cnt - 1 ? '
    ' : ' ');
    31             return true;
    32         }
    33         return false;
    34     }
    35 
    36 
    37     int num1 = getnum1(index);
    38     if(num1 > n)  return false;
    39     if(!vis[num1])
    40     {
    41         vis[num1] = true;
    42         res[cnt++] = num1;
    43         if(dfs(index + 1))  return true;
    44 
    45         vis[num1] = false;
    46         cnt--;
    47     }
    48 
    49     int num2 = getnum2(index);
    50     if(num2 > 54 || num2 > n)  return false;  //长度为100,n最大为54
    51 
    52     if(index < len - 1 && !vis[num2])
    53     {
    54         vis[num2] = true;
    55         res[cnt++] = num2;
    56         if(dfs(index + 2))  return true;
    57 
    58         vis[num2] = false;
    59         cnt--;
    60     }
    61 
    62     return false;
    63 }
    64 
    65 int main()
    66 {
    67     scanf("%s", s);
    68     len = strlen(s);
    69     if(len <= 9)  n = len;
    70     else  n = (len - 9) / 2 + 9;
    71 
    72     dfs(0);
    73 
    74     return 0;
    75 }
  • 相关阅读:
    点云平台之图像算法篇
    点云平台之CloudCompare开发
    点云平台之创建工程文件
    pcl介绍
    原型讲解二:原型是干什么用的
    原型讲解一
    博主平时主要发布什么?
    蒙特利尔大学工学院流程
    ubuntu 开热点
    argos3-simulator
  • 原文地址:https://www.cnblogs.com/lfri/p/11135260.html
Copyright © 2011-2022 走看看