zoukankan      html  css  js  c++  java
  • CF

    这题是在1到n范围内找满足(设一个数为x,数位之和为sum(x))x-sum(x)>=s的数的个数,根据x满足条件,我们就可以得到x+1也满足条件,因为x+1-sum(x+1)=x+1-(sum(x)+1)=x-sum(x),由x-sum(x)>=s可得x+1-sum(x+1),所以x满足则x+1也满足,可以推广得到一个数满足则其后面的数都满足,因此要找1到n内总的满足条件的数,只需找到第一个满足条件的即可,然后看样例又可以知道数越大满足条件的可能性就越大,因此具有单调性,可以用二分找这个数,0视为不满足,1视为满足,可以看出是这样00001111。。。。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    ll n,s;
    bool check(ll x)
    {
        ll tmp1=0;
        ll tmp2=x;
        while(x)
        {
            tmp1=tmp1+x%10;
            x/=10;
    
        }
        if(tmp2-tmp1>=s)
            return true;
        else
            return false;
    }
    int main()
    {
        std::ios::sync_with_stdio(false);
        cin>>n>>s;
        ll low=1,up=n,mid,ans=-1;
        while(low<=up)
        {
            mid=(low+up)>>1;
            if(check(mid))
            {
                ans=mid;
                up=mid-1;
            }
            else
                low=mid+1;
        }
        if(ans==-1)
            cout<<0<<endl;
        else
            cout<<n-ans+1<<endl;
        return 0;
    }
  • 相关阅读:
    推荐大家使用的CSS书写规范、顺序
    只能输入数字的文本框
    js和jQuery 获取屏幕高度、宽度
    jquery插件开发规范
    ie下使用firebug
    equals和==的使用
    引用数据类型的赋值
    数组工具Arrays的基本使用
    冒泡排序
    使用数组对杨辉三角练习
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754972.html
Copyright © 2011-2022 走看看