题意:
如果一个字符串包含两个相邻的重复子串,则称他为困难的串
输入k,l
输出由前l个字符组成的,字典序第k小的困难的串
搜啊搜,搜啊搜~~~
优化后的check函数:
只需要判断当前是否和前面的冲突,而不需要判断前面内部是否冲突
所以只判断后缀即可
#includeusing namespace std;int k,l,cnt;char ans[100];bool ok;/*bool check(int num){ for(int len=1;len<=num>>1;len++) { int cnt=0; for(int s=len+1;s<=num;s++) { if(ans[s]==ans[s-len]) { cnt++; if(cnt==len) return false; } else cnt=0; } } return true;}*/bool check(int num){ for(int len=1;len<=num<<1;len++) { int i; for(i=num;i>num-len;i--) if(ans[i]!=ans[i-len]) break; if(i==num-len) return false; } return true;}void dfs(int bit){ if(ok) return; if(cnt==k+1) { for(int i=1;i