Codeforces Round #667 (Div. 3) D. Decrease the Sum of Digits(贪心+暴力)

86 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
本文已参与「新人创作礼」活动,一 起开启掘金创作之路。
D. Decrease the Sum of Digits
题目

屏幕截图 2022-10-06 115339.png 中文大意

给你一个数字n每次可以操作一次让数字n加一问最少多少次可以让数字n的数位和小于等于S

题目分析

假设数字是11514我们可以发现使用最小次数让数字的数位和变小操作次数是6也就是将数字11514变成11520 通过这个例子我们可以发现如果想使花费最小的代价让数字的数位和减小就是让这个数字的进位所以我们只需要按照每一位的进位进行枚举即可

Code

int a[N];
int len;
void solve()
{
   int a,b; cin >> a >> b;
   auto check = [&](int x) {
     int num = 0;
     while(x) num += x % 10, x/= 10;
     return num <= b;
   };
   if(check(a)) {
    cout << 0 << endl;
    return;
   }
   for(int i = 10; i <= 1e18; i *= 10) {
     if(check(a + (i - a % i))) {
        cout << i - a % i << endl;
        return;
     }
   }
}