2024 蓝桥杯模拟赛 1

1|0P8761 [蓝桥杯 2021 国 BC] 大写


#include<bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; i32 main() { string s; cin >> s; for( auto & i : s ){ if( i >= 'a' and i <= 'z' ) cout << char( i - 'a' + 'A'); else cout << i; } return 0; }

2|0P8195 [传智杯 #4 决赛] 小智的疑惑


#include<bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; i32 main() { string s; cin >> s; int res = 0; for( int i = 0 ; i + 8 <= s.size() ; i ++ ){ if( s.substr( i , 8 ) == "chuanzhi" ) res ++; } cout << res << "\n"; return 0; }

3|0P8651 [蓝桥杯 2017 省 B] 日期问题


注意去重

#include<bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; int t[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; i32 main() { int a, b, c; cin >> a, cin.ignore(); cin >> b, cin.ignore(); cin >> c, cin.ignore(); int y, m, d; set<array<int, 3>> res; if (a <= 59) y = a + 2000; else y = a + 1900; m = b, d = c; if ( m >= 1 and m <= 12) { if (m != 2) { if (d >= 1 and d <= t[m]) res.insert({y, m, d}); } else { if ((y % 4 == 0 and y % 100 != 0) or (y % 400) == 0) { if (d >= 1 and d <= 29) res.insert({y, m, d}); } else if (d >= 1 and d <= 28)res.insert({y, m, d}); } } if (c <= 59) y = c + 2000; else y = c + 1900; m = a, d = b; if (m >= 1 and m <= 12) { if (m != 2) { if (d >= 1 and d <= t[m]) res.insert({y, m, d}); } else { if ((y % 4 == 0 and y % 100 != 0) or (y % 400) == 0) { if (d >= 1 and d <= 29) res.insert({y, m, d}); } else if (d >= 1 and d <= 28)res.insert({y, m, d}); } } if (c <= 59) y = c + 2000; else y = c + 1900; m = b, d = a; if (m >= 1 and m <= 12) { if (m != 2) { if (d >= 1 and d <= t[m]) res.insert({y, m, d}); } else { if ((y % 4 == 0 and y % 100 != 0) or (y % 400) == 0) { if (d >= 1 and d <= 29) res.insert({y, m, d}); } else if (d >= 1 and d <= 28)res.insert({y, m, d}); } } for (auto [x, y, z]: res) printf("%d-%02d-%02d\n", x, y, z); return 0; }

4|0P9240 [蓝桥杯 2023 省 B] 冶炼金属


两次二分

#include<bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; const int inf = 1e9, INF = 1e18; i32 main() { int n; cin >> n; vector<pii> a(n); for (auto &[x, y]: a) cin >> x >> y; int l = 1, r = inf, res = -1; for (int mid, flag; l <= r;) { mid = (l + r) / 2, flag = 1; for (const auto &[x, y]: a) { if (x / mid <= y) continue; flag = 0; break; } if (flag) res = mid, r = mid - 1; else l = mid + 1; } cout << res << " "; l = 1, r = inf, res = -1; for (int mid, flag; l <= r;) { mid = (l + r) / 2, flag = 1; for (const auto &[x, y]: a) { if (x / mid >= y) continue; flag = 0; break; } if (flag) res = mid, l = mid + 1; else r = mid - 1; } cout << res << "\n"; return 0; }

5|0P8627 [蓝桥杯 2015 省 A] 饮料换购


模拟

#include<bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; const int inf = 1e9, INF = 1e18; const int mod = 998244353; int power(int x, int y) { int ans = 1; while (y) { if (y & 1) ans = ans * x % mod; x = x * x % mod, y /= 2; } return ans; } int inv(int x) { return power(x, mod - 2); } i32 main() { int n, res = 0; cin >> n; for (int a = n, b = 0; a > 0 or b >= 3; a = b / 3, b %= 3) res += a, b += a, a = 0; cout << res << "\n"; return 0; }

6|0P8647 [蓝桥杯 2017 省 AB] 分巧克力


二分

#include<bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; const int inf = 1e9, INF = 1e18; const int mod = 998244353; int power(int x, int y) { int ans = 1; while (y) { if (y & 1) ans = ans * x % mod; x = x * x % mod, y /= 2; } return ans; } int inv(int x) { return power(x, mod - 2); } i32 main() { int n, m; cin >> n >> m; vector<pii> a(n); for (auto &[x, y]: a) cin >> x >> y; int l = 1, r = 1e5, res = -1; for (int mid, cnt; l <= r;) { mid = (l + r) / 2, cnt = 0; for (const auto &[x, y]: a) cnt += (x / mid) * (y / mid); if (cnt >= m) res = mid, l = mid + 1; else r = mid - 1; } cout << res << "\n"; return 0; }

7|0P8637 [蓝桥杯 2016 省 B] 交换瓶子


直接从小到大,每次判断瓶子在不在位置上,如果不在就进行一次交换

#include<bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; const int inf = 1e9, INF = 1e18; const int mod = 998244353; int power(int x, int y) { int ans = 1; while (y) { if (y & 1) ans = ans * x % mod; x = x * x % mod, y /= 2; } return ans; } int inv(int x) { return power(x, mod - 2); } i32 main() { int n; cin >> n; vector<int> a(n), b(n); for (int i = 0; i < n; i++) cin >> a[i], a[i]--, b[a[i]] = i; int res = 0; for (int i = 0, x, y, p, q; i < n; i++) { if (b[i] == i) continue; res++; x = i, y = a[i], p = b[x], q = b[y]; swap(a[p], a[q]), swap(b[x], b[y]); } cout << res << "\n"; return 0; }

8|0P8625 [蓝桥杯 2015 省 B] 生命之树


其实就是求树上的最大连通块,所以直接进行树形dp,枚举每个叶子选不选即可

#include<bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; const int inf = 1e9, INF = 1e18; const int mod = 998244353; int power(int x, int y) { int ans = 1; while (y) { if (y & 1) ans = ans * x % mod; x = x * x % mod, y /= 2; } return ans; } int inv(int x) { return power(x, mod - 2); } i32 main() { int n, res = 0; cin >> n; vector<int> f(n); for (auto &i: f) cin >> i; vector<vi> e(n); for (int i = 1, u, v; i < n; i++) cin >> u >> v, --u, --v, e[u].push_back(v), e[v].push_back(u); auto dfs = [&res, &f, e](auto &&self, int x, int fa) -> void { for (const auto &y: e[x]) { if (y == fa)continue; self(self, y, x); f[x] += max(0ll, f[y]); } res = max(res, f[x]); }; dfs(dfs, 0, -1); cout << res << "\n"; return 0; }

9|0P8638 [蓝桥杯 2016 省 A] 密码脱落


把原序列反序之后求一下lcs就行

#include<bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; const int inf = 1e9, INF = 1e18; const int mod = 998244353; int power(int x, int y) { int ans = 1; while (y) { if (y & 1) ans = ans * x % mod; x = x * x % mod, y /= 2; } return ans; } int inv(int x) { return power(x, mod - 2); } i32 main() { string a, b; cin >> a, b = a, reverse(b.begin(), b.end()); int n = a.size(); a = " " + a, b = " " + b; auto f = vector(n + 1, vi(n + 1)); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (a[i] == b[j]) f[i][j] = f[i - 1][j - 1] + 1; else f[i][j] = max(f[i - 1][j], f[i][j - 1]); cout << n - f[n][n] << "\n"; return 0; }

10|0P8774 [蓝桥杯 2022 省 A] 爬树的甲壳虫


几何概型,求出每一步所需要爬的次数即可

#include<bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; const int inf = 1e9, INF = 1e18; const int mod = 998244353; int power(int x, int y) { int ans = 1; while (y) { if (y & 1) ans = ans * x % mod; x = x * x % mod, y /= 2; } return ans; } int inv(int x) { return power(x, mod - 2); } i32 main() { int n, res = 0; cin >> n; for (int x, y; n; n--) cin >> x >> y, res = (res + 1) * y % mod * inv(y - x) % mod; cout << res << "\n"; return 0; }

__EOF__

本文作者PHarr
本文链接https://www.cnblogs.com/PHarr/p/17990524.html
关于博主:前OIer,SMUer
版权声明CC BY-NC 4.0
声援博主:如果这篇文章对您有帮助,不妨给我点个赞
posted @   PHarr  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示