找回密码
 立即注册
首页 业界区 业界 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设 ...

【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(9)

锦惺 2025-6-2 23:21:54
比赛链接
本文发布于博客园,会跟随补题进度实时更新,若您在其他平台阅读到此文,请前往博客园获取更好的阅读体验。
跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18869039
开题 + 补题情况

最近一直在准备期中考试,好久没写代码了,这场有点糖,前一个小时一题没开,实属红温,尤其是 1007,想了好久好久。
下周打南昌,自己第一次参加全国性的比赛,希望自己加油发挥吧!
1.png

1010 - 绳子切割

此题考查并查集(实际暴力也可以)。
我们删点是从大到小删,那么倒过来就是加点,加点就是从小到大加。
对于每一个点,连向比它小的结点的连通块,看是否能和 \(0\) 在同一块,如果不在,那么直接输出 \(0\),因为这个时候,它不和横梁同属一个连通块,说明它到 \(0\) 之间有点被删除了,进而导致该点被提前删除了。
点击查看代码
  1. #include <bits/stdc++.h>
  2. #define inf32 1e9
  3. #define inf64 2e18
  4. #define ls o << 1
  5. #define rs o << 1 | 1
  6. using i64 = long long;
  7. using u64 = unsigned long long;
  8. using u32 = unsigned int;
  9. const int N = 2e5 + 9;
  10. struct DSU {
  11.     std::vector<int> fa;
  12.     DSU(int n) {
  13.         fa.resize(n + 1);
  14.         std::iota(fa.begin(), fa.end(), 0);
  15.     }
  16.     int root(int x) {
  17.         return (fa[x] == x) ? x : (fa[x] = root(fa[x]));
  18.     }
  19.     void merge(int u, int v) {
  20.         if(root(u) == 0) {
  21.             fa[root(v)] = root(fa[u]);
  22.         } else {
  23.             fa[root(u)] = root(fa[v]);
  24.         }
  25.     }
  26. };
  27. void solve()
  28. {
  29.     int n, m;std::cin >> n >> m;
  30.     DSU dsu(n);
  31.     std::vector<std::vector<int>> g(n + 1);
  32.     for(int i = 1;i <= m;i ++) {
  33.         int u, v;std::cin >> u >> v;
  34.         g[u].push_back(v);
  35.         g[v].push_back(u);
  36.     }
  37.     for(int i = 1;i <= n;i ++) {
  38.         for(auto &x : g[i]) {
  39.             if(i < x)continue;
  40.             dsu.merge(i, x);
  41.         }
  42.         if(dsu.root(i) != 0) {
  43.             std::cout << 0 << '\n';
  44.             return;
  45.         }
  46.     }
  47.     std::cout << 1 << '\n';
  48. }
  49. int main()
  50. {
  51.     std::ios::sync_with_stdio(0), std::cin.tie(0), std::cout.tie(0);
  52.     int t = 1;std::cin >> t;
  53.     while(t --)solve();
  54.     return 0;
  55. }
复制代码
1005 - 真爱口上

这个题看似是一个非常恶心的模拟题,但是题目有一个很重要的信息:所有的字符串都是符合规则的音节序列。也就意味着我们不需要判断串的合法性,只需要根据特征计数就行了。

  • 基本音节结构:不难发现,一定是以元音结尾,因此只需要计算元音有多少个即可。
  • 鼻音:单算 nn 相连的情况,特别注意比如 nnna 的情况,此时不能算为两个鼻音。
  • 促音:计算 pp tt kk ss 的数量即可。
点击查看代码
  1. #include <bits/stdc++.h>
  2. #define inf32 1e9
  3. #define inf64 2e18
  4. #define ls o << 1
  5. #define rs o << 1 | 1
  6. using i64 = long long;
  7. using u64 = unsigned long long;
  8. using u32 = unsigned int;
  9. const int N = 2e5 + 9;
  10. template<typename T>
  11. T up(T x, T y) {
  12.     return (x + y - 1) / y;
  13. }
  14. void solve()
  15. {
  16.     int v, w;std::cin >> v >> w;
  17.     int h = w / 2 + 1;
  18.     int l = w - h;
  19.     int sum = v / h;
  20.     v -= sum * h;
  21.     int ans = 0;
  22.     if(sum) {
  23.         if(v > l)ans = sum + 1;
  24.         else ans = sum;
  25.     } else {
  26.         ans = 1;
  27.     }
  28.     std::cout << ans << '\n';
  29. }
  30. int main()
  31. {
  32.     std::ios::sync_with_stdio(0), std::cin.tie(0), std::cout.tie(0);
  33.     int t = 1;std::cin >> t;
  34.     while(t --)solve();
  35.     return 0;
  36. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册