zoukankan      html  css  js  c++  java
  • CF edu 42 C. Make a Square

    传送门:https://codeforces.com/problemset/problem/962/C

    题意:给定数n(1~2e9),可任意删某位上的数字,尽量使剩下的数开方后为整数,输出最少可删多少位数。

    随便搞一搞,先把1~1e5所有数的平方存下来,

    接下来就是怎么筛数了

    咋筛呢  n最多9位 从1位开始一直删到9位  哇 麻烦死,9个循环第9个循环内还有8个循环 

    那换个角度 n不行 就试试所有平方数,反正才1e5个,

    每个试一下 把n转化为字符串,看在n中能不能找到这1e5个数  ,n最多9位  咦 复杂度还行耶  过得去

    上手搞搞

    完成   A了

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<map>
    #include<queue>
    #include<stack>
    #include<list>
    #include<set>
    using namespace std;
    typedef long long ll;
    typedef pair<ll,ll> p;
    typedef long double ld;
    #define mem(x) memset(x, 0, sizeof(x))
    #define me(x) memset(x, -1, sizeof(x))
    #define fo(i,n) for(i=0; i<n; i++)
    #define sc(x) scanf("%lld", &x)
    #define pr(x) printf("%lld
    ", x)
    #define pri(x) printf("%lld ", x)
    #define lowbit(x) x&-x
    const ll MOD = 1e18 +7;
    const ll N = 6e6 +5;
    ll a[N];
    string s[N];
    ll f(string s, string t)
    {
        if(s.size()>t.size()) return -1;
        ll j=0;
        for(ll i=0; i<s.size(); i++)
        {
            ll f=0;
            for(; j<t.size(); j++)
            {
                if(t[j]==s[i])
                {
                    j++;
                    f=1;
                    break;
                }
            }
            if(!f) return -1;
        }
        return t.size()-s.size();
    }
    int main()
    {
        ll i, j ,k, l=0;
        ll n, m, t;
        string h="fff", p="sdsf";
        f(h,p);
        for(i=1; i<=100000; i++)
        {
            k=i*i;
            string ss;
            while(k)
            {
                ss+=(k%10)+'0';
                k/=10;
            }
            reverse(ss.begin(), ss.end());
            s[i]=ss;
        }
        string s1;
        cin>>s1;
        n=s1.size();
        for(i=100000; i>=1; i--)
        {
            k=f(s[i],s1);
            if(k>=0)
            {
                cout<<k<<endl;
                return 0;
            }
        }
        cout<<-1<<endl;
        return 0;
    }
    View Code
  • 相关阅读:
    不相交集合ADT
    Python基于比较的排序
    优先队列(堆)
    Python数据结构——散列表
    设计包含min函数的栈
    What really happens when you navigate to a URL
    browser process request
    Business vs Technology
    理解端口与IP
    Tor的教程
  • 原文地址:https://www.cnblogs.com/op-z/p/10825616.html
Copyright © 2011-2022 走看看