2023年11月22日雅礼习题课内容有哪些?

摘要:雅礼信奥 (2023.11.22) 习题课记录 都是 CF 题,不如 AT。 A - Yarik and Array(CF1899C) dp 题,作为学 OI (3) 年的萌新 OIer,后面才想到 dp 真是太蒟蒻了,时间复杂度
雅礼信奥 \(2023.11.22\) 习题课记录 都是 CF 题,不如 AT。 A - Yarik and Array(CF1899C) dp 题,作为学 OI \(3\) 年的萌新 OIer,后面才想到 dp 真是太蒟蒻了,时间复杂度 \(O(tn)\)。 初始 \(f_1 = 1\),其他为 \(0\)。 状态转移方程: \(\begin{cases} \text{if} & \text{abs}(a_{i - 1}) \bmod 2 + \text{abs}(a_i) \bmod 2 = 1 & f_i = \max(a_i,\ f_{i - 1} + a_i) \\ \text{if} & \text{abs}(a_{i - 1}) \bmod 2 + \text{abs}(a_i) \bmod 2 \neq 1 & f_i = a_i \end{cases}\) \(\max(f_1, f_2, \cdots, f_n)\) 即为答案。 罚时 \(1\) 次。 #include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <stack> using namespace std; using ll = long long; const int kMaxN = 2e5 + 20, kInf = (((1 << 30) - 1) << 1) + 1; ll n, a[kMaxN], f[kMaxN], ans = 0; int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); int t; for (cin >> t; t; -- t) { cin >> n; for (int i = 1; i <= n; ++ i) { cin >> a[i]; f[i] = 0; } f[1] = a[1]; ans = f[1]; for (int i = 2; i <= n; ++ i) { if (abs(a[i - 1]) % 2 + abs(a[i]) % 2 == 1) { f[i] = max(a[i], f[i - 1] + a[i]); ans = max(ans, f[i]); } else { f[i] = a[i]; ans = max(ans, f[i]); } } cout << ans << '\n'; } return 0; } B - Game with Integers(CF1899A) 一眼题 + 面向样例题,\(n \bmod 3 = 0\) 输出 Second,否则 First,时间复杂度 \(O(t)\)。 #include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <stack> using namespace std; using ll = long long; const int kMaxN = 2e5 + 20, kInf = (((1 << 30) - 1) << 1) + 1; int x; int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); int t; for (cin >> t; t; -- t) { cin >> x; cout << (!(x % 3)? "Second" : "First") << '\n'; } return 0; } C - 250 Thousand Tons of TNT(CF1899B) 枚举题。 首先,\(k\) 必定是 \(n\) 的因数,所以我们只需要枚举 \(n\) 的因数即可,时间复杂度不确定,好像是 \(O(tn\sqrt{n})\)。
阅读全文