1 /* 2 数学:这题一直WA在13组上,看了数据才知道是计算cost时超long long了 3 另外不足一个区间的直接计算个数就可以了 4 */ 5 #include6 #include 7 #include 8 #include 9 #include 10 using namespace std;11 12 typedef unsigned long long ull;13 int get_len(ull x)14 {15 int ret = 0;16 while (x) {17 x /= 10; ret++;18 } 19 return ret;20 }21 22 23 int main(void) //Codeforces Round #219 (Div. 2) B. Making Sequences is Fun24 {25 //freopen ("B.in", "r", stdin);26 27 ull w, m, k;28 while (cin >> w >> m >> k) {29 int len = get_len (m); ull mx = 0;30 for (int i=1; i<=len; ++i) {31 mx = mx * 10 + 9;32 }33 34 ull ans = 0; ull cost = (mx - m + 1) * k * len;35 while (cost <= w) { 36 w -= cost; ans += (mx - m + 1);37 len++; m = mx + 1; mx = mx * 10 + 9;38 cost = (mx - m + 1) * k * len;39 }40 41 ans += w / (len * k);42 cout << ans << endl;43 }44 45 return 0;46 }
1 #include2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 typedef long long ll; 9 int get_len(ll x)10 {11 int ret = 0;12 while (x) {13 x /= 10; ret++;14 } 15 return ret;16 }17 18 19 int main(void) //Codeforces Round #219 (Div. 2) B. Making Sequences is Fun20 {21 //freopen ("B.in", "r", stdin);22 23 ll w, m, k;24 while (scanf ("%I64d%I64d%I64d", &w, &m, &k) == 3) {25 int len = get_len (m); ll mx = 0;26 for (int i=1; i<=len; ++i) {27 mx = mx * 10 + 9;28 }29 30 ll ans = 0, now = 0, tot = 0;31 while (true) {32 now = mx - m + 1; tot = w / (k * len);33 if (now < tot) {34 ans += now; w -= now * k * len;35 m = mx + 1; mx = mx * 10 + 9; len++;36 }37 else {38 ans += tot; break;39 }40 }41 42 printf ("%I64d\n", ans);43 }44 45 return 0;46 }