尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

做题记录4

做题记录4
📅 发布时间:2026/6/18 6:57:29

CF577B.Modulo Sum

思路

求是否存在一段非空子序列的和模 \(m\) 的值为 \(0\) ,可以先等价地对每一个数字都模 \(m\) 。对于一个长度为 \(n\) 的序列,显然有 \(n\) 段前缀和,并且前缀和模 \(m\) 的值有 \([0, m)\) 共 \(m\) 种。根据抽屉原理,当 \(n > m\) 时,一定有至少两段前缀和的值是相同的,而这两段前缀和相间得到的这一段连续子序列的和模 \(m\) 的值是 \(0\) ,符合要求。
也就是说,当 \(n > m\) 时一定是 YES 。

当 \(n \leq m\) 时,这个问题就转化为了一个 01背包,由于 \(m \leq 10^3\) ,因此可以直接计算。
设 \(f_{i, j}\) 表示从第 \(i\) 个数开始,能否通过选取一些数使得这些数的和模 \(m\) 的值为 \(j\) ,就有状态转移方程:

\[f_{i, j} |= f_{i - 1, j} \]

\[f_{i, (j + a_i) \mod m} |= f_{i - 1, j} \]

考虑边界,有:\(f_{i, a_i} = 1\) 。

最后只需要判断是否存在一个 \(f_{i, 0} = true\) 就可以了。

代码

void solve(void) {int n, m;std::cin >> n >> m;std::vector<int> a(n + 1);for(int i = 1; i <= n; i++) {std::cin >> a[i];a[i] %= m;}if(n > m) {std::cout << "YES\n";return;}std::vector<std::vector<int>> f(2020, std::vector<int>(2020));for(int i = 1; i <= n; i++) f[i][a[i]] = 1;for(int i = 1; i <= n; i++) {for(int j = 0; j < m; j++) {f[i][j] |= f[i - 1][j];f[i][(j + a[i]) % m] |= f[i - 1][j];}if(f[i][0]) {std::cout << "YES\n"; return;}}std::cout << "NO\n";
}

CF25D. Roads not only in Berland

思路

操作数显然是联通块的数量减一。接下来考虑如何构造出一种输出方式。

可以用并查集维护这张图,一个联通块可以删边当且仅当联通块是一个环,构成环的这条边是多余的。所以记录一下每个联通块多出来的多余边,并且记录每个联通块的根节点,之后就可以按照下面的方式输出:

环边的两个节点 联通块的根和下个联通块的根连一条新边

代码

struct DSU {std::vector<int> p, siz;DSU(int n): p(n + 1), siz(n + 1, 1) {std::iota(p.begin(), p.end(), 0);}int find(int x) {if(x == p[x]) return p[x];return p[x] = find(p[x]);}bool unite(int a, int b) {int pa = find(a), pb = find(b);if(pa == pb) return false;if(siz[pa] < siz[pb]) std::swap(pa, pb);p[pb] = pa;siz[pa] += siz[pb];return true;}bool same(int u, int v) {return find(u) == find(v);}int size(int u) {return siz[find(u)];}
};void solve(void) {int n; std::cin >> n;DSU dsu(n);std::vector<PII> del;for(int i = 1; i < n; i++) {int u, v; std::cin >> u >> v;if(!dsu.unite(u, v)) del.emplace_back(u, v);}std::vector<int> roots;for(int i = 1; i <= n; i++) {if(dsu.p[i] == i) {roots.push_back(i);}}std::cout << (int)roots.size() - 1 << '\n';for(int i = 0; i < (int)roots.size() - 1; i++) {int u = del[i].x, v = del[i].y;int a = roots[i], b = roots[i + 1];std::cout << u << ' ' << v << ' ' << a << ' ' << b << '\n';}
}

相关新闻

  • lucene 8.7.0 版本中的倒排索引、数字、DocValues三种类型的查询性能对比 - 教程
  • display ip routing-table故障判断及题目 - 详解
  • 解题报告-小 A 的树

最新新闻

  • 常州买宠别瞎跑!天宁+钟楼3家连锁猫犬舍头条实测,江南梅雨季避坑完整版 - 萌宠俱乐部
  • 2026万元游戏装机看这一篇就够了!英特尔酷睿Ultra 200S Plus双款优选
  • Playwright自动化测试:从核心原理到实战应用的全方位指南
  • Claude Opus 4.7工程落地风险:不可控性如何摧毁AI生产信任
  • Django毕设项目: 基于 Django+Vue 的农业设备智能运维管理系统的设计与实现 基于 Django+Vue 的现代农业一体化管理系统(源码+文档,讲解、调试运行,定制等)
  • PowerPC 601缓存时序与总线仲裁机制深度解析

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号