题解:AT_ddcc2020_qual_d Digit Sum Replace

· · 题解

思路

一道数学思维题,被我场切了所以来水题解。

考虑每次操作,有两种情况。第一种是位数减少一位,数字和不变。另一种是位数不变,数字和减九,因为相加时进了一位。

既然跟位数与数字和有关,那读入的时候顺便统计一下。假设数字和为 x,位数为 y。那么位数上要变成一位,所以要 y-1 次操作。数字和要小于九,所以要 (x-1)/9 次操作,至于这个减一是因为当只剩九人时,即 X=9 时 无需进行操作,为了防止多算一次就需要减一,故答案为 (x-1)/9+y-1

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
int m,x,y,c[200001],d[200001];
signed main() {
    cin>>m;
    for(int i=1; i<=m; i++) {
        cin>>d[i]>>c[i];
        x+=(c[i]*d[i]);
        y+=c[i];
    }
    cout<<(x-1)/9+y-1;
    return 0;
}