Educational Codeforces #116 div2 C Banknotes
阿新 • • 發佈:2021-11-08
思維題,貪心
http://codeforces.com/contest/1606/problem/C
題意
有 \(n\) 種面值分別為 \(10^{a_i}\) 的紙幣,問用小於等於 \(k\) 張紙幣不能表示的最小的數是多大
Tutorial
考慮相鄰的面值,如果比100小的只有1,那麼它們之間就差了 99 張,所以每要漲一張,就需要相差的數。
\(k\) 張不能表示的最小的數等價於 \(k+1\) 張能表示的最小的數,因此直接對 \(k+1\) 張貪心地求出每張分配。
點選檢視程式碼
int a[N]; int main() { int T; cin >> T; ll n, k; while (T--) { int n, k; cin >> n >> k; k++; for (int i = 0; i < n; i++) { cin >> a[i]; int cur = 1; while (a[i]--) cur *= 10; a[i] = cur; } ll res = 0; for (int i = 0; i < n; i++) { int cnt = k; if (i + 1 < n) cnt = min(cnt, a[i + 1] / a[i] - 1); res += a[i] * 1ll * cnt; k -= cnt; } cout << res << '\n'; } return 0; // ll a = (n - base) % k == 0 ? (n - base) / k : (n - base) / k + // 1;ll(ceil(1.0*(n-base) / k)) }