zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 42 (Rated for Div. 2) C. Make a Square

    很裸的一个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
    ",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
    ");
            return 0;
        }
        while(n>0)
        {
            a[index]=n%10;
            n/=10;
            index++;
        }
        reverse(a,a+index);
        dfs(0);
        if(minum!=1000000) printf("%d
    ",minum);
        else
        {
            printf("-1
    ");
        }
        return 0;
    }
    

      

      

  • 相关阅读:
    猜数字游戏
    发红包程序
    实现微信摇一摇部分功能
    计算1+1/2+1/3+....+1/100的值
    约瑟夫问题
    简易计时器
    简易学生管理系统
    文件加密解密
    分鱼问题
    分橘子问题
  • 原文地址:https://www.cnblogs.com/zyf3855923/p/8867205.html
Copyright © 2011-2022 走看看