码迷,mamicode.com
首页 > 其他好文 > 详细

Educational Codeforces Round 42 (Rated for Div. 2) C. Make a Square

时间:2018-04-17 16:52:49      阅读:152      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!