当前位置 : 主页 > 编程语言 > java >

CF817C.Really Big Numbers(二分 思维)

来源:互联网 收集:自由互联 发布时间:2022-07-17
​​linkkk​​​ 题意: 定义美丽数为数位和与数值的差大于等于 的数,问有多少个美丽数小于等于 思路: 可以看出美丽数是满足单调性的,如果 是美丽数,那么 也一定是美丽数,相


​​linkkk​​​ 题意:
定义美丽数为数位和与数值的差大于等于的数,问有多少个美丽数小于等于
思路:
可以看出美丽数是满足单调性的,如果是美丽数,那么也一定是美丽数,相当于等式两边都增加了,等式依旧成立。二分找到最小的美丽数即可。
代码:

// Problem: C. Really Big Numbers
// Contest: Codeforces - Educational Codeforces Round 23
// URL: https://codeforces.com/problemset/problem/817/C
// Memory Limit: 256 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

ll n,s;

bool check(ll x){
ll sum=0,tmp=x;
while(x){
sum+=x%10;x/=10;
}
return abs(sum-tmp)>=s;
}

int main(){
cin>>n>>s;

ll l=1,r=2e18,ans=n;

//cout<<check(11)<<" "<<check(12)<<" "<<check(13)<<"\n";

while(l<=r){
ll mid=(l+r)/2;
if(check(mid)) ans=mid,r=mid-1;
else l=mid+1;
}
cout<<max(0ll,n-ans+1)<<endl;
return 0;
}


网友评论