补题链接:Here

ABC 水题跳过

D - Kth Excluded

给定 N 个正整数序列: A = (AtCoder Beginner Contest 205 - 图1 ) 和 Q 查询。
在第 i 个查询 ( AtCoder Beginner Contest 205 - 图2 ) 中,给定一个正整数 K ,在与 AtCoder Beginner Contest 205 - 图3 不同的正整数中找出第 K 个最小的整数。


二分找第一个比K值大的下标然后累加即可

  1. ll a[N];
  2. void solve() {
  3. int n, q;
  4. cin >> n >> q;
  5. for (int i = 0; i < n; ++i) {
  6. cin >> a[i], a[i] -= i;
  7. }
  8. ll k;
  9. while (q--) {
  10. cin >> k;
  11. cout << upper_bound(a, a + n, k) - a + k << "\n";
  12. }
  13. }

E - White and Black Balls

【题意待补】


一道经典组合数利用的构造题

  1. #include<bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. const int mod = 1e9 + 7;
  5. int n, m, k;
  6. int qp(int x, int y) {
  7. if (x == 0) return 0;
  8. if (x == 1) return 1;
  9. if (y == 0) return 1;
  10. if (y == 1) return x;
  11. int ans = qp(x, y / 2);
  12. (ans *= ans) %= mod;
  13. if (y & 1) (ans *= x) %= mod;
  14. return ans;
  15. }
  16. int C(int x, int y) {
  17. if (y < 0) return 0;
  18. int res = 1, an = 1;
  19. for (int i = x; i >= x - y + 1; i--)
  20. (res *= i) %= mod;
  21. for (int i = 1; i <= y; i++)
  22. (an *= i) %= mod;
  23. return (qp(an, mod - 2) * res) % mod;
  24. }
  25. signed main() {
  26. cin >> n >> m >> k;
  27. if (n - m > k) {
  28. puts("0");
  29. return 0;
  30. }
  31. cout << (C(n + m, n) - C(n + m, n - k - 1) + mod) % mod;
  32. return 0;
  33. }