CodeFroces 817C Really Big Numbers(二分)

来源:互联网 发布:办公室网络拓扑图 编辑:程序博客网 时间:2024/05/20 13:41

随便写了几个数发现每十个数所得出来的差是不变的,在这个基础上数字越大差越大。这是符合单调性的,所以我们直接二分找刚好不满足的位置即可,这个位置最高只能是n。最后答案就是n-front。

代码如下:

#include<iostream>#include<cstdio>#include<vector>#include<queue>#include<utility>#include<stack>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<set>#include<map>using namespace std;int main() {#ifndef ONLINE_JUDGE//freopen("in.txt", "r", stdin);//    freopen("out.txt", "w", stdout);#endiflong long n, s;scanf("%I64d%I64d", &n, &s);long long front = 0, back = n + 1; while(back - front > 1) {long long mid = (front + back) / 2;long long tmp = mid, sum = 0;while(tmp) {sum += tmp % 10;tmp /= 10;}if(mid - sum >= s) {back = mid;} else {front = mid;}}printf("%I64d\n", n - front);return 0;}


原创粉丝点击