-
就对于这种dfs:flag = flag||dfs(...) 是一个很好用很常见的结构 -
需要注意剪枝,如果说不会大于long long 那么大于1e11就可以返回false了 -
复现遇到的问题:1.你的len忘记初始化了,忘记每次都给它初始化了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int len;
bool dfs(string s, ll pre, ll cur, int idx) {
if (idx == len) return cur + 1 == pre ;
bool flag = false;
cur = cur * 10 + (s[idx] - '0');
if (cur > 1e11)return false;
if (pre == -1 || cur + 1 == pre) {
flag = flag || dfs(s, cur, 0, idx + 1);
}
flag = flag || dfs(s, pre, cur, idx + 1);
return flag;
}
int main() {
int n;
cin >> n;
while (n--) {
string str;
cin >> str;
len = str.size();
cout << ((dfs(str,-1,0,0)) ? "yes\n" : "no\n");
}
return 0;
}
|