题目链接:https://ac.nowcoder.com/acm/contest/1099/E
解题心得:其实很对限制条件题目中都已经给出了,给出了所有的限制条件之后会发现如果暴搜复杂度也不会特别的大。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn = 2e4+100;
char s[maxn];
ll ans = 0;
int len;
bool vis[maxn];
void dfs(int pos) {
if(pos >= len) {
ans++;
return ;
}
int va1 = s[pos] - '0';
if(!vis[va1]) {
vis[va1] = true;
dfs(pos+1);
vis[va1] = false;
}
if(va1 == 0 || pos + 1 >= len) return ;
int va2 = (s[pos] - '0')*10 + s[pos+1] - '0';
if(!vis[va2]) {
vis[va2] = true;
dfs(pos+2);
vis[va2] = false;
}
}
int main() {
// freopen("1.in.txt", "r", stdin);
while(scanf("%s", s) != EOF ){
ans = 0;
len = strlen(s);
dfs(0);
printf("%d\n", ans);
}
return 0;
}