voidsolve(){ int n; cin >> n; vector<int> a(n), b(n); for (auto &i: a) cin >> i; for (auto &i: b) cin >> i; int l = 0, r = 0, ans = 0; while (l < n && r < n) { if (a[l] <= b[r]) { ++l; ++r; } else { ++ans; ++r; } } cout << ans << endl; }
B. Coin Games
大致题意
有两个人做游戏,有几个英镑再桌面上,有些正面朝上有些背面朝上。
每次操作,允许移走一个正面朝上的,然后连续选择两个剩下的影片进行翻转
问谁会操作到最后一次
思路
翻转两个硬币等于没有翻转
AC code
1 2 3 4 5 6 7 8 9 10
voidsolve(){ int n; cin >> n; string str; str.resize(n); cin >> str; int cnt = 0; for (constauto& c: str) cnt += c == 'U'; cout << (cnt % 2 ? "YES" : "NO") << endl; }
voidsolve(){ int n, k; cin >> n >> k; vector<int> data(n); for (auto &i: data) cin >> i; auto check = [&](int x) { int use = 0; for (constauto &v: data) { if (v < x) use += x - v; if (use > k) break; } return use <= k; };
int l = 0, r = 1e15; while (l + 1 < r) { int mid = (l + r) >> 1; if (check(mid)) l = mid; else r = mid; } int ans = 0, use = k; for (constauto& v: data) { if (v > l) ++ans; else use -= l - v; } ans = min(n, use + ans);
cout << ans + (l - 1) * n + 1 << endl; }
D1. Reverse Card (Easy Version)
大致题意
给出 $n, m$,求满足条件的 $a, b$ 对
$1 \leq a \leq n, 1 \leq b \leq m$
$(a + b) \space mod \space b \times gcd(a, b) = 0$
思路
假定 $a = x \times y, b = x \times z$,且 $gcd(y, z) = 1$ 则可以得到
$$ & (a + b) \space mod \space b \times gcd(a, b) = 0 \\ \rightarrow & x \times y + x \times z = t \times (x \times z \times x) \\ \rightarrow & y + z = t \times x \time z \\ \rightarrow & 1 + \frac{y}{z} = t \times x \\ $$
容易得到,必然 $\frac{y}{z}$ 是整数,而 $gcd(y, z) = 1$,所以 $z = 1$,故 $1 + y = t \times x$
所以很容易得到公式进行计算
AC code
1 2 3 4 5 6 7 8 9 10 11
#define int long long
voidsolve(){ int n, m, ans = 0; cin >> n >> m; for (int i = 1; i <= n && i <= m; ++i) { int my = n / i; ans += (my + 1) / i; } cout << ans - 1 << endl; }
D2. Reverse Card (Hard Version)
大致题意
给出 $n, m$,求满足条件的 $a, b$ 对
$1 \leq a \leq n, 1 \leq b \leq m$
$b \times gcd(a, b) \space mod \space (a + b) = 0$
思路
假定 $a = x \times y, b = x \times z$,且 $gcd(y, z) = 1$ 则可以得到
$$ & b \times gcd(a, b) \space mod \space (a + b) = 0 \\ \rightarrow & x \times z \times x = t \times (x \times y + x \times z) \\ \rightarrow & x \times z = t \times (y + z) \\ \rightarrow & x \times = \frac{t}{z} \times (y + z) $$