标签:scan set 必须 ++ mem mes void i++ ret
很裸的一个DFS,但因为细节wa了10发才过。果然我还是太弱了。。
#include <iostream> #include <bits/stdc++.h> using namespace std; int a[15]={0}; int index=0; int t; bool vis[15]={0}; int minum=1000000; void dfs(int x) { int temp=1,res=0,sum=0; int v=0,i; if(x==index+1) { return; } int flag=0; for(i=0;i<index;i++) { if(vis[i]&&a[i]==0)//判断是否有前导零,如果有,这个零必须被删除 { sum--; } else if(vis[i]&&a[i]!=0) { break; } } for(i=0;i<index;i++) { if(vis[i]) { flag=1; res=res*10+a[i]; sum++; } } int tmp=sqrt(res); if(tmp*tmp==res&&flag==1&&res!=0) { //printf("%d %d\n",tmp,res); minum=min(minum,index-sum); } for(i=x;i<index;i++) { vis[i]=true; dfs(i+1); vis[i]=false; } dfs(x+1); } int main() { long long n; scanf("%I64d",&n); memset(vis,false,sizeof(vis)); t=n; int tt=sqrt(t); if(tt*tt==t) { printf("0\n"); return 0; } while(n>0) { a[index]=n%10; n/=10; index++; } reverse(a,a+index); dfs(0); if(minum!=1000000) printf("%d\n",minum); else { printf("-1\n"); } return 0; }
Educational Codeforces Round 42 (Rated for Div. 2) C. Make a Square
标签:scan set 必须 ++ mem mes void i++ ret
原文地址:https://www.cnblogs.com/zyf3855923/p/8867205.html