題目鏈接: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;
}