这是一个深搜的模板题。
首先,我们发现n的位数很小,只有9位。于是我们想到了深搜算法。
首先,把n拆分成数组,记n的数位个数位$|n|$。
枚举$|n|$个元素的全排列。
之后我们判定。
一个是完全平方数当且仅当
$\left\lfloor\sqrt(x)\right\rfloor$ = $\sqrt(x)$
于是对于每一个全排列,把他们拼起来,然后判定即可
注意要去除前导零和长度为0的情况。
代码中,存放排列使用$vector$实现的
// Author : harry// Language : C++ (GNU C++ 11)// Upload : CodeForces / luogu// Time : 2018.9// Problem : Make a Square// Tell Myself : Think Twice Code Once// All rights reserved#include
dig){ //深搜 if (k==n+1){ if (check(dig)) ans=max(ans,(int)dig.size()); return ; } dfs(k+1,dig); dig.pb(a[k]);dfs(k+1,dig) ;}int main(){ scanf("%d",&x) ; init(x) ; dfs(1,b) ; if (ans==-1) printf("-1\n") ; else printf("%d\n",n-ans) ;}