T1:矩形的周长与面积
模拟
代码实现
a, b = map(int, input().split()) print(2*(a+b)) print(a*b)
T2:机会成本
一开始,所有事情认真对待,则拿到 的分数
然后如果认真对待第 件事,则拿到 的分数
只需枚举认真对待哪一件事即可
代码实现
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; int main() { int n; cin >> n; vector<int> a(n), b(n); rep(i, n) cin >> a[i] >> b[i]; int ans = accumulate(b.begin(), b.end(), 0); int mx = 0; rep(i, n) mx = max(mx, a[i]-b[i]); ans += mx; cout << ans << '\n'; return 0; }
T3: 阶乘尾零
的幂次,相当于 的幂次乘以 的幂次
中 的幂次肯定比 的幂次高
所以我们只需找出 中 的幂次即可,可以用 legendre
函数来求
代码实现
#include <bits/extc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; using ll = long long; // n! 被素数 p 整除了多少次 ll legendre(ll n, int p) { ll res = 0; while (n) { res += n/p; n /= p; } return res; } int main() { ll n; cin >> n; cout << legendre(n, 5) << '\n'; return 0; }
T4:前序中序转后序
递归
代码实现
#include <bits/extc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; void f(string a, string b) { if (b == "") return; int p = b.find(a[0]); f(a.substr(1, p), b.substr(0, p)); // 前一半 f(a.substr(p+1), b.substr(p+1)); // 后一半 cout << a[0]; } int main() { // a: 前序 b: 中序 string a, b; cin >> a >> b; f(a, b); return 0; }
T5:三色排序
本题是一个考察数学思维的题目
这些交换,操作,这种有一个过程的题目一般都是需要找到这个操作的核心,然后变成一个数学问题
我们把 数组和结果数组进行比较,如果已经一致了,就没必要再动了,这里体现了一种贪心的想法
记最后升序的数组为 b[]
,对于 ,且 或 , 我们记录一分(因为 0
和 2
还原了,自然 1
也就还原了),这样总数组有一个分数
现在对操作进行打分
对于一次操作,最多获得 分(应该是 0
的找到一个 2
,应该是 2
的找到一个 0
,把它们交换一下即可),其余操作最多获得 分
代码实现
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; inline int read() { int x = 0; char c; while (c < '0' or c > '9') c = getchar(); while ('0' <= c and c <= '9') { x = x*10+c-'0'; c = getchar(); } return x; } int main() { int n = read(); vector<int> a(n); rep(i, n) a[i] = read(); vector<int> cnt(3); // c[i] 表示 i 的个数 rep(i, n) cnt[a[i]]++; // c: 前 cnt[0] 个数中 1 的个数,d: 前 cnt[0] 个数中 2 的个数 // e: 后 cnt[2] 个数中 0 的个数,f: 后 cnt[2] 个数中 1 的个数 int c = 0, d = 0, e = 0, f = 0; rep(i, cnt[0]) { if (a[i] == 1) c++; if (a[i] == 2) d++; } for (int i = n-cnt[2]; i < n; ++i) { if (a[i] == 0) e++; if (a[i] == 1) f++; } int ans = c+d+e+f-min(d, e); cout << ans << '\n'; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异