1 /* 2 构造:从大到小构造,每一次都把最后不是9的变为9,p - p MOD 10^k - 1,直到小于最小值。 3 另外,最多len-1次循环 4 */ 5 #include6 #include 7 #include 8 #include 9 using namespace std;10 11 typedef long long ll;12 const int MAXN = 1e3 + 10;13 const int INF = 0x3f3f3f3f;14 15 int get_len(ll x) {16 int ret = 0;17 while (x) {18 x /= 10; ret++;19 }20 return ret;21 }22 23 int get_nine(ll x) {24 int ret = 0;25 while (x) {26 ll y = x % 10; x /= 10;27 if (y != 9) break;28 ret++;29 }30 return ret;31 }32 33 int main(void) { //Codeforces Round #135 (Div. 2) B. Special Offer! Super Price 999 Bourles!34 //freopen ("C.in", "r", stdin);35 36 ll p, d;37 while (scanf ("%I64d%I64d", &p, &d) == 2) {38 int len = get_len (p); ll now = p;39 int mx = get_nine (p); ll ans = p;40 ll cut = 1;41 while (true) {42 ll y = now / cut % 10;43 if (y != 9) {44 now = now - cut * 10; now = now / cut + cut - 1;45 }46 cut *= 10;47 if (now < p - d) break;48 int cnt = get_nine (now);49 if (cnt > mx) ans = now;50 }51 52 printf ("%I64d\n", ans);53 }54 55 return 0;56 }