当前位置: 首页 > news >正文

做题记录4

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';}
}
http://www.rkmt.cn/news/15126.html

相关文章:

  • lucene 8.7.0 版本中的倒排索引、数字、DocValues三种类型的查询性能对比 - 教程
  • display ip routing-table故障判断及题目 - 详解
  • 解题报告-小 A 的树
  • 【React 状态管理深度解析:Object.is()、Hook 机制与 Vue 对比实践指南】 - 教程
  • 页面置换算法
  • 2025盐酸优质厂家权威推荐榜:高纯度盐酸的品质之选
  • 2025片碱厂家权威推荐榜:优质供应与实力生产口碑之选
  • 2025阳离子聚丙烯酰胺厂家推荐榜:高效絮凝与定制解决方案
  • AI与敏捷开发管理系列3:敏捷方法在AI计划中的应用案例
  • 2025 年转基因小鼠公司 TOP 企业品牌推荐排行榜,传统 KO 转基因小鼠,条件性 cKO 转基因小鼠,ROSA26 位点基因 KI 小鼠,Tol2 转基因小鼠模型,点突变敲入转基因小鼠公司推荐!
  • 读人形机器人29未来10年
  • 深入解析:C#/.NET/.NET Core优秀项目和框架2025年9月简报
  • java-mc-sever
  • 华为荣耀手机密码忘记怎么解锁wenwenhu专用解锁平台”在哪下载?用它成功弄好锁定方式
  • 黑科技还是真噱头?详解当下的cloak斗篷技术。
  • 完整教程:【论文笔记】基于深度学习的图像分割研究综述 和 基于深度学习的二分图像分割综述
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十四) -> 配置构建(一) - 指南
  • 2025 年离心机厂家 TOP 企业品牌推荐排行榜,平板,吊袋,刮刀,拉袋,全自动,平板吊袋,平板刮刀,下卸料,卧式过滤,实验室,浓缩过滤离心机公司推荐!
  • orbital 转换scikitlearn pipeline 为sql的框架
  • 2025 办公家具厂家 TOP 企业品牌推荐排行榜,实木办公家具,现代办公家具,环保办公家具,智能办公家具,定制办公家具,老板办公家具,总裁办公家具公司推荐!
  • 2025pc穿线管源头厂家 TOP 企业品牌推荐排行榜,PC 建筑工程电工套管,PC 刚性阻燃电线管,PC 硬质刚性塑料管,PC 刚性阻燃低烟无卤绝缘,PC 地铁工程预埋公司推荐!
  • 2025 年溴化锂回收公司 TOP 回收服务商推荐排行榜,溴化锂,溴化锂制冷机,溴化锂水溶液,溴化锂设备,溴化锂机组,旧溴化锂机组回收公司推荐!
  • 2025 年河北光伏支架设备厂家 TOP 企业品牌推荐排行榜,廊坊,霸州,北方光伏支架设备,光伏支架冲孔机,光伏支架角钢成型机,光伏支架 C 型钢成型机推荐这十家公司!
  • 2025冷库板厂家TOP企业品牌推荐排行榜,聚氨酯冷库板,冷库保温板,冷库用 B1 级阻燃板,聚氨酯冷库板,冷库保温板工程,聚氨酯夹心板,聚氨酯保温板,聚氨酯板,聚氨酯防火板公司推荐!
  • 2025 年实验台厂家 TOP 企业品牌推荐排行榜,实验室全钢,理化板,实验室设备,实验室专用,全钢中央,实验室家具,钢木实验台公司推荐!
  • 2025 年运动木地板厂家:鸿源宝利,全产业链深耕打造专业运动空间解决方案
  • US$348 Turbo Decoder HU100RV2 for BMW F Series
  • 【光照】[PBR][菲涅尔]实现方法对比
  • 20251002NOIP模拟赛
  • 使用Java将Word文件转换为PNG图片 - 指南